[英]Parsing Json objects inside objects using Gson and get the length
I have a json file like below and want to parse the overlays like overlay1,overlay2,overlay3
: 我有一个像下面的json文件,想解析诸如
overlay1,overlay2,overlay3
类的叠加层:
{
"overlays": {
"overlay1": {
"imagesFPS": 12,
"clickThrough": false,
"repeatCount": 0,
"sensitivity": 0.6,
},
"overlay2": {
"cgButtonPressedColor": "#ffaa56",
"relative": "screen",
"isOverlayRendered": true,
"cgBorderWidth": "0px",
},
"overlay3": {
"cgButtonPressedColor": "#007f00",
"text": "Goto Page3 on Touch 5 Release",
}
}
}
Currently I am doing this: 目前,我正在这样做:
Gson gson = new GsonBuilder().create();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonObject ovl = job.getAsJsonObject("overlays");
for (int i = 1; i <= 100; i++) {
JsonObject overlay = ovl.getAsJsonObject("overlay" + i);
if (overlay != null) {
osb.setOverlay(jsp.getOverlay(overlay));
}
}
How can I get the length of overlays (here: overlay1
, overlay2
, overlay3
)? 如何获取叠加层的长度(此处为
overlay1
, overlay2
, overlay3
)? How do I query the length of 3
via the gson API? 如何通过gson API查询
3
的长度?
And I want to know the overlay1,overlay2,overlay3
in a string or array so that I can iterate over them. 而且我想知道字符串或数组中的
overlay1,overlay2,overlay3
,以便可以迭代它们。
Note: Here I have to iterate 100 times or any times so that I can iterate if overlays increase later in json file. 注意:在这里,我必须迭代100次或任意次,以便以后在json文件中叠加增加时可以进行迭代。 It iterates unnecessarily in looping.
它在循环中不必要地进行迭代。
How can I iterate only overlay1
or overlay2
or overlay3
and so without unnecessary iterating? 如何仅迭代
overlay1
或overlay2
或overlay3
等,而又没有不必要的迭代?
I mean I just want to get the overlay1
, overlay2
, overlay3
and so on in jsonobjects
via Gson. 我的意思是我只想通过Gson在
jsonobjects
获取overlay1
, overlay2
, overlay3
等。
I have solved this using this code below. 我已经使用下面的代码解决了这个问题。
Gson gson = new GsonBuilder().create();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonObject ovl = job.getAsJsonObject("overlays");
Map<String, Object> data = new Gson().fromJson(ovl, type);
Iterator<String> entries = data.keySet().iterator();
while (entries.hasNext())
{ JsonObject overlay = ovl.getAsJsonObject(entries.next().toString());
if (overlay != null)
{
osb.setOverlay(jsp.getOverlay(overlay));
}
}
Have you considered using an array instead of wrapped objects? 您是否考虑过使用数组而不是包装对象?
{
"overlays": [
{"overlay1": {
"imagesFPS": 12,
"clickThrough": false,
"repeatCount": 0,
"sensitivity": 0.6,
}},
{"overlay2": {
"cgButtonPressedColor": "#ffaa56",
"relative": "screen",
"isOverlayRendered": true,
"cgBorderWidth": "0px",
}},
{"overlay3": {
"cgButtonPressedColor": "#007f00",
"text": "Goto Page3 on Touch 5 Release",
}}
]
}
And using this code: 并使用以下代码:
Gson gson = new Gson();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonArray ovl = job.getAsJsonArray("overlays");
if (ovl != null) {
osb.setOverlay(jsb.getOverlay(ovl.get(ovl.lenght() - 1)));
}
Or if you want to use wrapped json objects, you should create a list and insert elements like this: 或者,如果要使用包装的json对象,则应创建一个列表并插入如下元素:
Gson gson = new Gson();
List<JsonObject> overlays = new LinkedList<>();
JsonObject job = gson.fromJson(fileReader, JsonObject.class);
JsonObject ovl = job.getAsJsonObject("overlays");
for (int i = 1; ; ++i) {
JsonObject overlay = ovl.getAsJsonObject("overlay" + i);
if (overlay == null) {
break;
} else {
overlays.put(overlay);
}
}
// Use "overlays" list
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.