Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JSON字符串字段的JSON数组异常_Javascript_Java_Arrays_Json - Fatal编程技术网

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

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

我试图创建一个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)

问题是我如何得到第一个返回此值的示例?

第一个案例应该可以。由于您是从外部源获取的,因此不必添加额外的反斜杠来转义字符。但是,当您在代码中手动键入字符串文字时,需要添加反斜杠以转义某些字符

请注意,
“{\“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"}]}]