【问题标题】:Retrieve name of fields of a JSONObject - Java检索 JSONObject 的字段名称 - Java
【发布时间】:2016-02-20 19:03:45
【问题描述】:

我必须在 Java 中检索 JSONObject 的所有字段名称。 例如,这是一个 JSON:

{
"name" : {
        "first" : "John",
        "last" : "McCarthy"
    },
"birth" : ISODate("1927-09-04T04:00:00.000Z"),
"death" : ISODate("2011-12-24T05:00:00.000Z"),
"contribs" : [ 
        "Lisp", 
        "Artificial Intelligence", 
        "ALGOL"
    ]
}

这个 JSON 对象只是一个例子,我不知道 JSONObject 包含什么,因为我导入了它。我没有关于使用 Gson/Jackson 进行反序列化的字段名称的任何信息。

假设我有一个 JSONObject myDocJson 包含之前的 JSON 对象,我使用一个迭代器:

Iterator<?> keys = myDocJson.keySet().iterator();
while(keys.hasNext()) {
System.out.println(keys.next());
}

结果我得到:

name
birth
death
contribs

但例如我没有name.firstname.last。所以这个迭代器不适用于嵌套对象。

【问题讨论】:

    标签: java json


    【解决方案1】:

    您只是在打印密钥。

    要获取值,请尝试

    JSONObject object = null; // your json object
    for (Object key : object.keySet()) {
        System.out.println(key + "=" + object.get(key)); // to get the value
    }
    

    编辑

    对于 JSONObject 中的对象,请尝试

    JSONObject object = null; // your json object
    for (Object key : object.keySet()) {
        System.out.println(key + "=" + object.get(key)); // to get the value
        for (Object subKey : ((JSONObject) object.get(key)).keySet()) {
            System.out.println(subKey + "=" + object.get(subKey));
        }
    }
    

    【讨论】:

    • 我不需要值。我只需要键的名称,
    • 它不按json文件的顺序...例如,如果文件键顺序是name,occupation,city,state...它是按“ocuupation,city,state,name “......关于订单的任何想法?
    • 我强烈建议使用 gson 而不是 jsonsimple...但我认为您不能依赖订单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多