java json 获取对象名_使用Gson从JSON对象获取键名 - java

我有一个JSON对象,我想从中获取键名并将其存储在ArrayList中。我使用了以下代码

jsonData(String filename) {

JsonParser parser = new JsonParser();

JsonElement jsonElement = null;

try {

jsonElement = parser.parse(new FileReader(filename));

} catch (JsonIOException | JsonSyntaxException | FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

JsonObject jsonObject = jsonElement.getAsJsonObject();

int i = 0;

for (Entry entry : jsonObject.entrySet()) {

String key = entry.getKey();

JsonElement value = entry.getValue();

keys.add(key);

i++;

}

nKeys = i;

}

如果我将此代码与简单的JSON对象一起使用

{

"age":100,

"name":"mkyong.com",

"messages":["msg 1","msg 2","msg 3"]

}

这很好。年龄,名称和消息(不是值)被添加到我的ArrayList中。一旦我尝试将相同的代码与更复杂的JSON一起使用,就像这样

{"widget": {

"debug": "on",

"window": {

"title": "Sample Konfabulator Widget",

"name": "main_window",

"width": 500,

"height": 500

},

"image": {

"src": "Images/Sun.png",

"name": "sun1",

"hOffset": 250,

"vOffset": 250,

"alignment": "center"

},

"text": {

"data": "Click Here",

"size": 36,

"style": "bold",

"name": "text1",

"hOffset": 250,

"vOffset": 100,

"alignment": "center",

"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"

}

}}

我只有根密钥。有人可以为此指出正确的方向吗?

感谢大家!

参考方案

我宁愿使用Gson来实现我认为最擅长的事情,而不是遍历带有循环和条件的Gson(JSON)API:仅需几行代码即可进行非常简单的(反序列化)处理。我会从(反)序列化问题decouple中考虑任何数据操作/查询/表示问题。换句话说,尽可能合理地在序列化之前对数据进行必要的处理,类似地,在反序列化之后对数据进行必要的处理。

因此,如果由于某种原因我想要JSON结构中的所有键,而又想使用Gson,则可能采用以下方法。 (当然,我目前无法想到为什么这种事情有用的任何原因。)

import java.io.FileReader;

import java.util.ArrayList;

import java.util.Collection;

import java.util.List;

import java.util.Map;

import com.google.gson.Gson;

public class App

{

public static void main(String[] args) throws Exception

{

List keys1 = getKeysFromJson("input_without_lists.json");

System.out.println(keys1.size());

System.out.println(keys1);

List keys2 = getKeysFromJson("input_with_lists.json");

System.out.println(keys2.size());

System.out.println(keys2);

}

static List getKeysFromJson(String fileName) throws Exception

{

Object things = new Gson().fromJson(new FileReader(fileName), Object.class);

List keys = new ArrayList();

collectAllTheKeys(keys, things);

return keys;

}

static void collectAllTheKeys(List keys, Object o)

{

Collection values = null;

if (o instanceof Map)

{

Map map = (Map) o;

keys.addAll(map.keySet()); // collect keys at current level in hierarchy

values = map.values();

}

else if (o instanceof Collection)

values = (Collection) o;

else // nothing further to collect keys from

return;

for (Object value : values)

collectAllTheKeys(keys, value);

}

}

input_without_lists.json

{

"widget": {

"debug": "on",

"window": {

"title": "Sample Konfabulator Widget",

"name": "main_window",

"width": 500,

"height": 500

},

"image": {

"src": "Images/Sun.png",

"name": "sun1",

"hOffset": 250,

"vOffset": 250,

"alignment": "center"

},

"text": {

"data": "Click Here",

"size": 36,

"style": "bold",

"name": "text1",

"hOffset": 250,

"vOffset": 100,

"alignment": "center",

"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"

}

}

}

input_with_lists.json

[{

"widget": {

"debug": "on",

"windows": [{

"title": "Sample Konfabulator Widget",

"name": "main_window",

"width": 500,

"height": 500

},{

"title": "Sample Konfabulator Widget",

"name": "main_window",

"width": 500,

"height": 500

},{

"title": "Sample Konfabulator Widget",

"name": "main_window",

"width": 500,

"height": 500

}]

}

}]

JSON PATH字段NULL检查表达式 - java

我有一个像bellow的json数组:{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sa…Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…Java Map,如何将UTF-8字符串正确放置到地图? - java

我有一个地图,LinkedHashMap更确切地说。我想在上面放一个字符串对象。然后,我读取此值以查看实际存储的内容。字符串本身具有非ASCII字符(西里尔文,韩文等)。将其放到地图上然后阅读后,这些字符将替换为??? s。一些代码:Map obj = new LinkedHashMap(); System.out.println("name: &…当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…Java-父类正在从子类中调用方法? - java

抱歉,我还是编码的新手,可能还没有掌握所有术语。希望您仍然能理解我的问题。我想得到的输出是:"Cost for Parent is: 77.77" "Cost for Child is: 33.33" 但是,我得到这个:"Cost for Parent is: 33.33" "Cost f…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值