为什么会自动附加额外的反斜杠?

时间:2014-07-02 22:31:56

标签: java json

我在JSON下面有这个

[
    {
        "itemid": "59",
        "toppings": [
            {
                "name": "Quantity      1",
                "value": [
                    "Honey with Chocolate Sauce  10 ML"
                ]
            }
        ]
    }
]

我正在使用java中的org.json以这种方式解析它

JSONArray json = new JSONArray(orderjson);
JSONObject orderdetailsjson = new JSONObject();

for(int i=0;i<json.length();i++)
{

    JSONObject jsonobjectpar = json.getJSONObject(i);
    orderdetailsjson.put("orderid", jsonobjectpar.getString("orderid"));
    orderdetailsjson.put("itemid", jsonobjectpar.getString("itemid"));
    orderdetailsjson.put("toppings", jsonobjectpar.getString("toppings"));

}

System.out.println(orderdetailsjson);

当我运行上述内容时,输出为

{
    "itemid": "59",
    "toppings": "[{\"name\":\"Quantity      1\",\"value\":[\"Honey with Chocolate Sauce  10 ML\"]}]"
}

toppings数组有额外的反斜杠。

请让我知道如何消除它们?

为什么会自动附加额外的反斜杠?

如何消除它们?

我尝试使用

String toppings  = jsonobjectpar.getString("toppings");

toppings =  toppings.replace("\\/", "/");

orderdetailsjson.put("toppings", toppings);

但没有工作。

1 个答案:

答案 0 :(得分:1)

您已将JSON对象转换为String并将String用作属性值。 String包含双引号字符,需要在最终序列化中进行转义。 (这是因为引号字符具有特殊含义......作为字符串终止符。)

但是如果您在问题开头尝试生成JSON,那么您正在错误地构建JSONObject。您不应该将"puttings"的值设置为String。它应该是一个JSON对象。改变

    orderdetailsjson.put("toppings", jsonobjectpar.getString("toppings"));

    orderdetailsjson.put("toppings", jsonobjectpar.getJSONObject("toppings"));

或(在这种情况下是正确的),

    orderdetailsjson.put("toppings", jsonobjectpar.getJSONArray("toppings"));

...因为浇头实际上是一个数组。