我正在尝试将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 \”。
请告诉我。提前谢谢。
答案 0 :(得分:2)
nameValuePair.getName()
和nameValuePair.getValue()
都返回字符串,因此它们将作为字符串添加到json中。您应该将JSONArray
对象作为JSONObjectData.put()
中的第二个参数传递。
由于BasicNameValuePair
仅接受字符串值,请尝试使用HashMap<String, Object>
或从其字符串表示重新创建JSONArray
。