【问题标题】:How to flat json in android如何在android中扁平化json
【发布时间】:2015-02-26 08:02:31
【问题描述】:

我有 json

{
  "a": 11,
  "b": 22,
  "object": {
    "c": 33,
    "d": 44,
    "e": 55
  }
}

我想制作一个只有一层的 json,它包含所有这样的键:

{
  "a": 11,
  "b": 22,
  "c": 33,
  "d": 44,
  "e": 55
}

可以假设我的json中没有重复键!

在 android 中实现这一点的快速方法是什么?

【问题讨论】:

  • 内部对象可以与外部对象具有相同的键吗?可以有多个相同类型的对象,例如{a:{x:y},b:{x:z}}(如果是,那么您想如何转换它)?
  • 你说得对,我忘了写这个。重复键是不可能的
  • 我想您需要代码但没有一行代码......

标签: java android json


【解决方案1】:
String json = "{
  "a": 11,
  "b": 22,
  "object": {
    "c": 33,
    "d": 44,
    "e": 55
  }
}";


JSONObject jObj = new JSONObject(json);
JSONObject jObjNew = new JSONObject();
multiToLinearJson(jObj);


public void multiToLinearJson(JSONObject jObj) {
    Iterator<String> iter = jObj.keys();
    while (iter.hasNext()) {
        String key = iter.next();
        try {
            Object value = jObj.get(key);
            if (value instanceof JSONObject) {
                multiToLinearJson(value);
            }
            jObjNew.put(key, value);
        } catch (JSONException e) {
            // Something went wrong!
        }
    }
}

输出: jObjNew.toString();

{
  "a": 11,
  "b": 22,
  "c": 33,
  "d": 44,
  "e": 55
}

未测试!

【讨论】:

  • 您的回答是正确的,而且很快,但由于我的代码情况,我更愿意对其进行编码。谢谢你的回答!
【解决方案2】:

感谢您的回答, 其实我是通过代码完成的

// Iterate inner-json and add to the outer json
JSONObject innerJson = outerJson.getJSONObject("Object");
Iterator<?> keys = innerJson .keys();
while( keys.hasNext() ){
    String key = (String)keys.next();
    Object ob = innerJson .get(key);
    outerJson.put(key, ob);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-25
    • 2021-05-24
    • 2011-11-15
    • 1970-01-01
    • 2021-11-19
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多