【问题标题】:Android: put NameValuePair data in JSONObjectAndroid:将 NameValuePair 数据放入 JSONObject
【发布时间】:2014-05-28 12:20:24
【问题描述】:

我正在尝试将 NameValuePairdata 放入 JSONObject。 NameValuePairdata 的名称为字符串,值为 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\" 附加到数组值中。前任。 \"min\",\"m1\" 等...

任何人都知道如何避免附加这些 \"value\"

请告诉我。提前致谢。

【问题讨论】:

  • 您是否尝试找出 nameValuePair.getName() 和 nameValuePair.getValue() 返回的内容?请分享此信息。尝试记录这些值。
  • nameValuePair.getName() 和 nameValuePair.getValue() 返回我最初构造的正确字符串。在 JSONObject.put() 时,值发生了变化。

标签: android json


【解决方案1】:

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

由于BasicNameValuePair 仅接受字符串值,请尝试使用HashMap&lt;String, Object&gt; 代替,或从其字符串表示中重新创建JSONArray

【讨论】:

  • 嗨 Alexander,要从其字符串表示重新创建 JSONArray,我应该将 \" 替换为 " 还是有任何其他方法可以重新创建.请评论。谢谢。
  • 当您将带有字符串值的 JSONObject 序列化到其中时,会添加引号。所以new JSONArray(nameValuePair.getValue()) 应该可以工作。
  • 谢谢亚历山大。我试过new JSONArray(nameValuePair.getValue()),它工作正常。
猜你喜欢
  • 1970-01-01
  • 2014-06-10
  • 2015-06-29
  • 2012-09-22
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
相关资源
最近更新 更多