【问题标题】:JSONObject get value of first node regardless of nameJSONObject 获取第一个节点的值,无论名称如何
【发布时间】:2015-11-04 20:07:00
【问题描述】:

我想知道是否有一种方法可以在不知道其名称的情况下获取 JSONObject 的第一个孩子的值:

我有一些 JSON 带有一个名为 this_guy 的节点

{"this_guy": {"some_name_i_wont_know":"the value i care about"}}

使用 JSONObject,如果我不知道孩子的名字,我如何才能干净地获得“我关心的价值”。我只知道“this_guy”,有人吗?

【问题讨论】:

  • 是每个JSON对象中固定的值“我关心的值”的位置吗?
  • @AbtPst 不能。根据实现,值在 json 对象中的位置不一定取决于 json 字符串中的位置。 (并且该位置可能完全不可用,例如,如果 json 解析器返回带有哈希图的对象)
  • 嗯,嗯,对于你所寻求的价值的位置,你一定有所了解吧?如果您不知道键并且不知道位置/索引,则无法确定值在哪里。
  • 我可以依赖的是,人们只会为这个对象返回一个孩子。我只主张 {"this_guy":"the value I care about"} 但他们坚持以上格式,
  • 哦,所以只需获取“this_guy”对象并提取值。看看我的回答

标签: java android jsonobject


【解决方案1】:

使用JSONObject.keys(),它返回此对象中字符串名称的迭代器。然后使用这些键来检索值。

只获取第一个值:

 Iterator<String> keys = jsonObject.keys();
 // get some_name_i_wont_know in str_Name
 String str_Name=keys.next(); 
 // get the value i care about
 String value = json.optString(str_Name);

【讨论】:

  • 但是我只想要第一个值而不管其他任何键
  • @erik first 值的概念在 json 对象中没有意义。
  • @njzk2:第一个值是key,第二个是value,因为你知道JSONObject是key-value pairs的组合
  • @ρяσѕρєяK 我不会去调用一个键value,但是好的。
【解决方案2】:
Object obj = parser.parse(new FileReader("path2JsonFIle"));

JSONObject jsonObject = (JSONObject) obj;

试试这个迭代器

JSONObject jsonObj = (JSONObject)jsonObject.get("this_guy");

for (Object key : jsonObj.keySet()) {
        //based on you key types
        String keyStr = (String)key;
        Object keyvalue = jsonObj.get(keyStr);

        /*check here for the appropriate value and do whatever you want*/
        //Print key and value
        System.out.println("key: "+ keyStr + " value: " + keyvalue);

    }

一旦你得到合适的值,就跳出循环。例如,您说您只需要内部映射中的第一个值。所以尝试类似的东西

int count = 0;

String valuINeed="";
for (Object key : jsonObj.keySet()) {
            //based on you key types
            String keyStr = (String)key;
            Object keyvalue = jsonObj.get(keyStr);

            valueINeed = (String)keyvalue;
            count++;

            /*check here for the appropriate value and do whatever you want*/
            //Print key and value
            System.out.println("key: "+ keyStr + " value: " + keyvalue);

            if(count==1)
                break;

        }

          System.out.println(valueINeed);

【讨论】:

    【解决方案3】:

    如果你只关心值而不关心键,你可以直接使用这个:

    Object myValue = fromJson.toMap().values().iterator().next();
    

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 2011-09-07
      • 2018-12-21
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2013-02-19
      相关资源
      最近更新 更多