使用 json 字符串字段的 JSON 数组异常



我正在尝试创建一个JSONArray对象,在JSONArray中还有另一个数组,其中包含一个json字符串的对象,如下所示。请注意 res 字段。

[{
"time": 123813213,
"value": [{
"name": "task",
"res": "{"taskName" : "NAME", "taskValue" : 3}"
}]
}]

当我将上述内容作为字符串返回并执行时,这会导致异常

String jsonStr = "[{ "time": 123813213, "value": [{ "name": "task", "res": "{"taskName", "taskValue"}" }] }]";
JSONArray jsonArr = new JSONArray(jsonStr);

当我通过在我存储的 json 字符串所在的位置添加额外的 \ 来执行此操作时,问题已得到解决。

String jsonStr = "[{ "time": 123813213, "value": [{ "name": "task", "res": "{\"taskName\", \"taskValue"}\" }] }]";
JSONArray jsonArr = new JSONArray(jsonStr);

请注意我添加的附加 \。我不确定如何解决第一种情况,因为我不是自己创建 jsonStr,而是从某个地方获取它,它只包含一个\而不是三个\。在第一种情况下,我做错了什么吗?

我得到的例外是使用第一个示例

org.json.JSONException: Expected a ',' or '}' at 61 [character 62 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:432)
at org.json.JSONObject.<init>(JSONObject.java:223)
at org.json.JSONTokener.nextValue(JSONTokener.java:362)
at org.json.JSONArray.<init>(JSONArray.java:117)
at org.json.JSONTokener.nextValue(JSONTokener.java:365)
at org.json.JSONObject.<init>(JSONObject.java:208)
at org.json.JSONTokener.nextValue(JSONTokener.java:362)
at org.json.JSONArray.<init>(JSONArray.java:117)
at org.json.JSONArray.<init>(JSONArray.java:145)
at Main.main(Main.java:10)

第二个示例解析良好并返回正确的结果,即此。

[{"time":123813213,"value":[{"res":"{"taskName", "taskValue"}","name":"task"}]}]

问题是我如何获得第一个示例来返回它?

第一种情况应该没问题。由于您是从外部源获取的,因此不必添加额外的反斜杠来转义字符。但是,当您代码中手动键入字符串文本时,需要添加反斜杠来转义某些字符。

请注意,"{"taskName", "taskValue"}"是无效的 JSON。如果可以解析,则会导致{"taskName", "taskValue"}这是javascript中无效的语法。要创建数组,您将使用["taskName", "taskValue"].

如果你的意思是让它成为一个对象,它会像{"taskName": "Wash dishes", "taskValue": 5}

请分享例外。这是一个有效的 JSON,它应该可以工作。

第二个是有效的,因为当您在 JAVA 中将 JSON 转换为字符串时,它会创建为这样。

">

[{\"time\":123813213,\"value\":[{\"name\":\"task\",\"res\":\"{\\"taskName\\

" : \\"NAME\\", \\"taskValue\\" : 3}\"}]}]"您可以通过在 java 中使用任何 JSON 到字符串转换器来尝试此操作。 你的 json 没有错。

最新更新