修改/更新jsonArray中的值?

时间:2015-12-08 09:16:06

标签: java android arrays json

我想要做的是在特定的索引位置更改/替换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}}

这是我的数据库的快照。

enter image description here

2 个答案:

答案 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 JSONObjectJSONArray内,为了解决这个问题,您可以轻松创建包含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
}