Android:将NameValuePair数据放在JSONObject中

时间:2014-04-14 13:45:27

标签: android json

我正在尝试将NameValuePairdata放到JSONObject中。 NameValuePairdata的名称为String,Value的值为JSONArray。现在,当我尝试将此NameValuePairdata放在JSONObject中时,jsonobject将JSONArray值转换为字符串。

请查看以下代码了解更多详情:

构建NameValuePair:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

    nameValuePairs.add(new BasicNameValuePair("id", "1"));      

    JSONArray arr = new JSONArray();
    if(arrBean != null && arrBean.size() > 0) {
        for (Bean bean : arrBean) {
            JSONObject idsJsonObject = new JSONObject();
            try {
                idsJsonObject.put("min", bean.getMin());
                idsJsonObject.put("m1", bean.getMin());
                idsJsonObject.put("sec", bean.getSec());
            } catch (JSONException e) {
                e.printStackTrace();
            }
            arr.put(idsJsonObject);
        }
    }
    nameValuePairs.add(new BasicNameValuePair("records", arr.toString()));

构造要发送给HttpPost的JSONObject:

JSONObject JSONObjectData = new JSONObject();

    for (NameValuePair nameValuePair : nameValuePairs) {
        try {
            JSONObjectData.put(nameValuePair.getName(), nameValuePair.getValue());
        } catch (JSONException e) {

        }
    }

如上所示,JSONObjectData会产生以下结果:

{"id":"1","records":"[{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"},{\"min\":\"610\",\"m1\":\"10\",\"sec\":\"\"}]"}

你可以看到,它会自动在数组值中附加 \“value \”。 E.x. \“min \”,\“m1 \”等...

任何机构都知道如何避免附加这些 \“value \”

请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:2)

nameValuePair.getName()nameValuePair.getValue()都返回字符串,因此它们将作为字符串添加到json中。您应该将JSONArray对象作为JSONObjectData.put()中的第二个参数传递。

由于BasicNameValuePair仅接受字符串值,请尝试使用HashMap<String, Object>或从其字符串表示重新创建JSONArray