【问题标题】:How to remove JSONArray element using Java如何使用 Java 删除 JSONArray 元素
【发布时间】:2012-02-03 03:38:51
【问题描述】:

我的 JsonArray 是

[{
"Id": null,
"Name": "One New task",
"StartDate": "2010-02-03T05:30:00",
"EndDate": "2010-02-04T05:30:00",
"Duration": 1,
"DurationUnit": "d",
"PercentDone": 0,
"ManuallyScheduled": false,
"Priority": 1,
"parentId": 8,
"index": 0,
"depth": 3,
"checked": null },{
"Id": null,
"Name": "New task",
"StartDate": "2010-02-04T05:30:00",
"EndDate": "2010-02-04T05:30:00",
"Duration": 0,
"DurationUnit": "d",
"PercentDone": 0,
"ManuallyScheduled": false,
"Priority": 1,
"parentId": 8,
"index": 1,
"depth": 3,
"checked": null }]

现在我想从这个 JsonArray 中删除 Id,ManuallyScheduled,checked,

我尝试在 JAVA 中使用 jsonArray.remove(1)jsonArray.discard("Id")。 但什么也没发生。删除数组项我做错了什么?

我使用 JAVA 作为我的技术。

【问题讨论】:

    标签: java json hibernate extjs4


    【解决方案1】:

    你有一个对象数组。因此,您必须遍历数组并从 每个 对象中删除必要的数据,例如

    for (int i = 0, len = jsonArr.length(); i < len; i++) {
        JSONObject obj = jsonArr.getJSONObject(i);
        // Do your removals
        obj.remove("id");
        // etc.
    }
    

    我假设您在这里使用的是 org.json.JSONObjectorg.json.JSONArray,但无论您使用什么 JSON 处理库,主体都保持不变。

    如果您想将[{"id":215},{"id":216}] 之类的内容转换为[215,216],您可以这样做:

    JSONArray intArr = new JSONArray();
    for (int i = 0, len = objArr.length(); i < len; i++) {
        intArr.put(objArr.getJSONObject(i).getInt("id"));
    }
    

    【讨论】:

    • 很高兴听到这个消息 :-) 如果这是您想要定期执行的操作,您可以随时扩展 JSONArray 并添加 removeData(String... keys) 方法或类似方法。
    • 再问你一个问题.. 我怎样才能将值传递给 java 中的 JSONArray。就像我有 [{"id":215},{"id":216}] 形式的 jsonArray 但我想将我的 jsonArray 转换为 [215,216] 是有什么办法吗??我怎样才能做到这一点。
    • 您可以手动执行此操作,我将更新我的答案以说明如何执行此操作。
    • 您好,我遇到了同样的问题,我收到的日期格式为 2012-01-30T00:00:00 那么如何将它分配给我的日期变量 startDate在 JAVA pojo 类中。
    • 我认为你必须使用.getString("date"),然后使用SimpleDateFormat之类的东西手动将String解析为Date
    【解决方案2】:

    当你想直接使用 json 结构时,这有时在 android 中很有用。

    请注意,我只在处理数组内的 JSONObject 时使用它。

    public static JSONArray remove(final int idx, final JSONArray from) {
        final List<JSONObject> objs = asList(from);
        objs.remove(idx);
    
        final JSONArray ja = new JSONArray();
        for (final JSONObject obj : objs) {
            ja.put(obj);
        }
    
        return ja;
    }
    
    public static List<JSONObject> asList(final JSONArray ja) {
        final int len = ja.length();
        final ArrayList<JSONObject> result = new ArrayList<JSONObject>(len);
        for (int i = 0; i < len; i++) {
            final JSONObject obj = ja.optJSONObject(i);
            if (obj != null) {
                result.add(obj);
            }
        }
        return result;
    }
    

    【讨论】:

    • 为什么要添加到列表中而不是直接添加到新的 JSONArray 中?
    • 是的,你可以这样做。我有未优化的版本,因为为方便起见,我已经有了 asList 方法。
    【解决方案3】:

    下面的方法会在array中找到匹配id的对象,然后返回过滤后的数组。

    public JSONArray removeObject(JSONArray array, String id) throws JSONException {
        for (int i = 0; i < array.length(); i++) {
            JSONObject obj = array.getJSONObject(i);
            if (obj.getString("ID").equals(id)) {
                array.remove(i);
                //  Toast.makeText(this, "ENCONTRADO", Toast.LENGTH_SHORT).show();
            }
        }
        return array;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-07
      • 1970-01-01
      • 2021-04-25
      • 2014-01-08
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2011-08-21
      相关资源
      最近更新 更多