Android JSONObject.put string方法向JSON字符串添加额外的\字符

Android JSONObject.put string方法向JSON字符串添加额外的\字符,android,json,Android,Json,我有一个json字符串,其中包含pid、name、price等元素。我正在logcat中显示它。但当我使用put方法向json对象添加json字符串时,这个字符串会发生变化。当我打印json对象“\”时,charcate被添加到每个键值对中。我无法找出问题的真正原因 json是一个普通字符串,而jObj是JSONObject 我的logcat详细信息如下: json = {"products":[{"pid":"14","name":"zxc","price":"123456"},{"pid":

我有一个json字符串,其中包含pid、name、price等元素。我正在logcat中显示它。但当我使用put方法向json对象添加json字符串时,这个字符串会发生变化。当我打印json对象“\”时,charcate被添加到每个键值对中。我无法找出问题的真正原因

json是一个普通字符串,而jObj是JSONObject

我的logcat详细信息如下:

json = {"products":[{"pid":"14","name":"zxc","price":"123456"},{"pid":"6","name":"Sony Xperia","price":"35000"},{"pid":"8","name":"Samsung Galaxy Note","price":"32000"},{"pid":"5","name":"htc","price":"26326"},{"pid":"9","name":"Nokia Lumia 800","price":"18000"},{"pid":"2","name":"iphone","price":"12345"},{"pid":"15","name":"sdjnas","price":"12243"},{"pid":"13","name":"Samsung S5222","price":"6500"},{"pid":"11","name":"Nokia C201","price":"4400"},{"pid":"7","name":"Nokia Asha 200","price":"4000"},{"pid":"1","name":"htc","price":"1234"},{"pid":"3","name":"htc","price":"1234"},{"pid":"4","name":"htc","price":"1234"},{"pid":"10","name":"aks","price":"1234"},{"pid":"12","name":"asd","price":"123"}],"success":1}
在编写以下代码行之后:

jObj.put("details", json);
添加了一个额外的字符“\”

json object = {"details":"{\"products\":[{\"pid\":\"14\",\"name\":\"zxc\",\"price\":\"123456\"},{\"pid\":\"6\",\"name\":\"Sony Xperia\",\"price\":\"35000\"},{\"pid\":\"8\",\"name\":\"Samsung Galaxy Note\",\"price\":\"32000\"},{\"pid\":\"5\",\"name\":\"htc\",\"price\":\"26326\"},{\"pid\":\"9\",\"name\":\"Nokia Lumia 800\",\"price\":\"18000\"},{\"pid\":\"2\",\"name\":\"iphone\",\"price\":\"12345\"},{\"pid\":\"15\",\"name\":\"sdjnas\",\"price\":\"12243\"},{\"pid\":\"13\",\"name\":\"Samsung S5222\",\"price\":\"6500\"},{\"pid\":\"11\",\"name\":\"Nokia C201\",\"price\":\"4400\"},{\"pid\":\"7\",\"name\":\"Nokia Asha 200\",\"price\":\"4000\"},{\"pid\":\"1\",\"name\":\"htc\",\"price\":\"1234\"},{\"pid\":\"3\",\"name\":\"htc\",\"price\":\"1234\"},{\"pid\":\"4\",\"name\":\"htc\",\"price\":\"1234\"},{\"pid\":\"10\",\"name\":\"aks\",\"price\":\"1234\"},{\"pid\":\"12\",\"name\":\"asd\",\"price\":\"123\"}],\"success\":1}\n"}
添加反斜杠会导致获取字符串时出现问题。JSONException logcat中未显示成功值:

JSONObject json = null;

List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

        Log.d("All Products: ", json.toString());

        try
        {
            int success = json.getInt("success");

            if (success == 1)
            {
                products = json.getJSONArray(TAG_PRODUCTS);

                for (int i = 0; i < products.length(); i++)
                {
                    JSONObject c = products.getJSONObject(i);

                    String id = c.getString(TAG_PID);
                    String name = c.getString(TAG_NAME);

                    HashMap<String, String> map = new HashMap<String, String>();

                    map.put(TAG_PID, id);
                    map.put(TAG_NAME, name);

                    productsList.add(map);
                }
            }
            else
            {
                Intent i = new Intent(getApplicationContext(), NewProductActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
            }
        }
        catch (JSONException e)
        {
            e.printStackTrace();
        }

这是一个功能良好的JSONobject。我用Cocoa JSON编辑器创建了一个,没有错误。我不知道是什么增加了这些反斜杠,但我可以告诉你没关系

JSONObject jsonObj = new JSONObject(json);

jsonObj.get("products");

JSONObject newJsonObj = new JSONObject();
newJsonObj.put("whatever", jsonObj.get("products"));
如果希望保留json而不转义,则需要将jsonObject添加到JsonArray中

JSONArray jsonArray = new JSONArray();
jsonArray.put(jsonObj);
稍后再拿回来

for (int i = 0; i < jsonArray.length(); i++)  { 
    JSONObject jsonObj = jsonArray.getJSONObject(i); 
 // then you can start filtering out the array.
    if (jsonObj.has("products")) {
         JSONArray nJsonArray = new JSONArray(jsonObj.get("products"));
          for (......) {} 
}
for(inti=0;i
没有将“细节”转换为“细节”?@Sufian没有。我已经在这里直接粘贴了jObj的值。提示:字符转义:@MarcinOrlowski你到底想指出什么?@AkshaySoam斜杠是
转义字符
。但是我在获取值时遇到问题。例如,编译器说没有值“success”但您可以看到它出现在字符串的最后一个位置,但有一个额外的斜杠。因此,我在从中检索字符串时遇到问题。@AkshaySoam请将代码发布到访问“success”的位置。@AkshaySoam是否替换了
jParser.makeHttpRequest()
line?我对
jParser
的类型很好奇。请说明。@Sufian没有,实际上我在另一个android活动中收到了json对象。我只是在第一个活动中声明时将json字符串作为参数传递,然后尝试获得“成功”“它成功了……:)@AkshaySoam没有理解你的意思,但是你解决了这个问题,这很好。”
for (int i = 0; i < jsonArray.length(); i++)  { 
    JSONObject jsonObj = jsonArray.getJSONObject(i); 
 // then you can start filtering out the array.
    if (jsonObj.has("products")) {
         JSONArray nJsonArray = new JSONArray(jsonObj.get("products"));
          for (......) {} 
}