我正在尝试创建一个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)
第二个示例解析为fine并返回正确的结果。
[{"time":123813213,"value":[{"res":"{\"taskName\", \"taskValue\"}","name":"task"}]}]
问题是如何获得第一个返回此示例?
答案 0 :(得分:1)
第一种情况应该没问题。由于您是从外部源获取它,因此不必添加额外的反斜杠来转义字符。但是当您手动在代码中键入字符串文字时,需要添加反斜杠以转义某些字符。
请注意,"{\"taskName\", \"taskValue\"}"
是无效的JSON。如果可以解析它将导致{"taskName", "taskValue"}
,这在javascript中不是有效的语法。要创建数组,您可以使用["taskName", "taskValue"]
。
如果您认为它是一个对象,那就像{"taskName": "Wash dishes", "taskValue": 5}
答案 1 :(得分:0)
请分享例外情况。它是一个有效的JSON,它应该可以工作。
第二个是工作,因为当你在JAVA中将JSON转换为String时,它就是这样创建的。
&#34; [{\&#34;时间\&#34;:123813213,\&#34;值\&#34;:[{\&#34;名称\&#34;:\ &#34;任务\&#34; \&#34; RES \&#34;:\&#34; {\\&#34; TASKNAME \\&#34; :\\&#34; NAME \\&#34;,\\&#34; taskValue \\&#34; :3} \&#34;}]}]&#34;
您可以在java中使用任何JSON to String转换器来尝试此操作。 你的json没有错。