我想要做的是在特定的索引位置更改/替换json数组中的值。在查看http://www.json.org/javadoc/org/json/JSONArray.html的文档后,我发现jsonArray没有getIndex()方法。这种情况如何在给定的索引位置更新我的json数组。 这是在我的android代码中创建json数组的方法。
@Override
public void afterTextChanged(Editable s) {
String netChange = netRate.getText().toString();
final int row_id = (int) newRow.getTag();
if ((row_id<0) || (row_id> itemSelectedJson.length())){
return;
}
try {
itemSelectedJson.getJSONObject(row_id-1).put("net_rate",netChange);
Log.d("NETRATE_TW",itemSelectedJson.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
};
这是我用来更新包含json对象的json数组的代码。
{{1}}
现在这段代码的问题是每次在代码中添加新项目时都会更新jsonArray。因此,第一个对象值与最后一个对象相同。
另请注意,我在文本观察器中使用此代码。所以afterTextchanged()方法看起来像这样。
{{1}}
这是我的数据库的快照。
答案 0 :(得分:2)
jSONObject(它是名称,值对的集合)可以转换为JSONArray,它是&#34;值的有序数组&#34;在JSONObject中。
可以使用 .toJSONArray()方法完成此操作。
当您需要替换/更新JSONArray时,您可以使用该方法 .put(int index,java.util.Map value)
与目前的做法不同,即获取对象并设置新的键和值。
http://www.json.org/javadoc/org/json/JSONArray.html#put(int,java.util.Map)
答案 1 :(得分:2)
据我了解,您的问题是在JSONObjects
中使用相同的值创建多个JSONArray
,这是因为您无法获得已创建的index
JSONObject
在JSONArray
内,为了解决这个问题,您可以轻松创建包含JSONObject
而不是JSONObjects
包含JSONArray
的复合JSONObjects
,对象名称将是JSONObject
数据中唯一的唯一名称,当您进行任何更改或添加任何项目时,如果它不存在,它将被添加为新对象,否则它将覆盖现有对象它之前添加了,例如假设条形码值在您的数据中是唯一的,因此代码将如下所示:
// declaring itemSelectedJson as JSONObject
JSONObject itemSelectedJson = new JSONObject();
.
.
.
// when wanting to add a new item
itemSelectedJson.put(jsonObject.getString("barcode"), jsonObject);
并检索您通过此JSONObject
进行简单迭代的数据:
Iterator<?> keys = itemSelectedJson.keys();
JSONObject single_item;
while(keys.hasNext()) {
String key = (String)keys.next();
single_item = itemSelectedJson.getJSONObject(key);
// do what do you want here
}