Javascript 使用JSON字符串字段的JSON数组异常
我试图创建一个JSONArray对象,在JSONArray中有另一个数组,其中包含一个json字符串对象,如下所示。注意res字段Javascript 使用JSON字符串字段的JSON数组异常,javascript,java,arrays,json,Javascript,Java,Arrays,Json,我试图创建一个JSONArray对象,在JSONArray中有另一个数组,其中包含一个json字符串对象,如下所示。注意res字段 [{ "time": 123813213, "value": [{ "name": "task", "res": "{\"taskName\" : \"NAME\", \"taskValue\" : 3}" }] }] 当我以字符串形式返回上述内容并执行 String jsonStr = "[{ \"time
[{
"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)
问题是我如何得到第一个返回此值的示例?第一个案例应该可以。由于您是从外部源获取的,因此不必添加额外的反斜杠来转义字符。但是,当您在代码中手动键入字符串文字时,需要添加反斜杠以转义某些字符 请注意,
“{\“taskName\”,\“taskValue\“}”
是无效的JSON。如果可以对其进行解析,将导致{“taskName”,“taskValue”}
,这在javascript中是无效的语法。要创建数组,可以使用[“taskName”,“taskValue”]
如果你想让它成为一个对象,它会像
{“taskName”:“洗碗碟”,“taskValue”:5}
请分享例外情况。它是一个有效的JSON,应该可以工作
第二个是有效的,因为在JAVA中将JSON转换为字符串时,它是这样创建的
“[{\'time\':123813213,\'value\':[{\'name\':\'task\',\'res\':\'{\'taskName\':\\'name\',\\'taskValue\\':3}\'}]]
您可以使用java中的任何JSON到字符串转换器来尝试这一点。
您的json没有任何问题。啊,很抱歉,我没有将整个json放在一起,我对其进行了修复以使其有效。问题是第一个不起作用。它返回一个异常。“res”:“{\“taskName\”:“NAME\”,“taskValue\”:3}”我认为原因是它将taskName和taskValue视为json对象,但它们不是。我想把res的整个值保持为一个字符串。我该如何解决这个问题呢?啊,一开始我没有注意到,但这是因为
JSONArray
只接受JSON数组,而您正在向它传递一个JSON对象。那么为什么第二种情况有效呢?我试图将json对象作为字符串而不是json对象传递(参考res字段)。我的错误。当我写这篇文章时,我只是想res
不是一个JSON数组,我误解了你的问题。再看一眼。第一个例子对我来说很好。在第二个示例中,它是如何从这里得到写出的jsonStr
字符串的?org.json.JSONException:org.json.JSONTokener.syntaxError(JSONTokener.java:432)org.json.json.JSONObject.(JSONObject.java:223)org.json.JSONTokener.nextValue(JSONTokener.java:362)上的61[character 62行1]处应为“,”或“}”在org.json.JSONArray.(JSONArray.java:117)在org.json.JSONTokener.nextValue(JSONTokener.java:365)在org.json.JSONObject.(JSONObject.java:208)在org.json.JSONTokener.nextValue(JSONTokener.java:362)在org.json.JSONArray.(JSONArray.java:117)在org.json.JSONArray.(JSONArray.java:145)在Main.Main(Main.java:10)上
[{"time":123813213,"value":[{"res":"{\"taskName\", \"taskValue\"}","name":"task"}]}]