如何将此 JSON 文件解析为某个 ArrayList<String>?
How to parse this JSON file to some ArrayList<String>?
过去我已经将 json 文件从 url 解析到本地 sqlite 数据库,json 源如下所示:
[
{
"origin": "accommodation",
"parent": "",
"en": "Accommodation"
},
{
"origine": "book",
"parent": "shopping",
"en": "Book"
},
{
"origin": "university",
"parent": "education",
"en": "University"
}
]
但现在好像不一样了。我验证了以下 json 文件,因此我确定它是有效的 json,但它的格式不同,所以我不知道如何以正确的方式解析它。此外,这次我会将内容放在 ArrayList 中。这是 json 文件:
{
"city1": {
"item1": {
"score": 6196.58,
"step": 0.00423,
"name": "User 1",
"form": "yellow"
},
"item2": {
"score": 106.86,
"step": 2.5822,
"name": "User 2",
"form": "yellow"
},
"item3": {
"score": 671.48,
"step": 0.387,
"name": "User 3",
"form": "yellow"
},
},
"misc": {
"online_users": {
"kind1": 18,
"kind2": 3
},
"ops": [
""
]
},
"city2": {
"item1": {
"score": 6196.58,
"step": 0.00405,
"name": "User 1",
"form": "yellow"
},
"item2": {
"score": 179563.93,
"step": 0.000138,
"name": "User 2",
"form": "yellow"
},
"min_size": {
"line": 10
},
"out_of_sync": [
"0e888069530497506433b5f0cacb",
"b428fa3a9b9e13cf8b26196bfcc7",
"f42442a2e46523f059809f83f1a9"
],
},
}
你能告诉我如何处理这些值以及如何放入一些数组列表吗?
有多种方法可以做到这一点,但我会post我认为最合理的方法。如果您不介意将它放在单独的数组中,您可以这样做:
String stringOfJSONCode = <read in the JSON here>;
JSONObject json = new JSONObject(stringOfJSONCode);
Iterator<String> iter = json.keys();
while (iter.hasNext()) {
String key = iter.next();
try {
Object value = json.get(key);
} catch (Exception e) {
}
}
您需要使用迭代器来遍历 JSONObject。您可以使用任何其他循环来遍历 JSONArray。这将遍历外部对象,如 city1、misc、city2。密钥将是 city1、misc 或 city2。
如果你想获得这些,只需将其添加到 'try'
JSONObject object = json.getJSONObject(key);
or
JSONArray array = json.getJSONArray(key);
取决于你想得到什么。获得这些后,您可以执行以下操作:
JSONObject city1 = object.getJSONObject("item1");
List<String> jsonList = new ArrayList<String>();
jsonList.add(object.getDouble("score"));
jsonList.add(object.getDouble("step"));
jsonList.add(object.getString("name"));
jsonList.add(object.getString("form"));
如果您不确定它是 item1 还是其他什么,您可以使用迭代器再次遍历它并动态添加每个项目。您也可以进行另一个 try-catch,尝试获取一个 JSONArray,如果它不是一个数组,它将进入 catch,然后遍历该对象。
您还可以制作哈希图或二维数组,将所有内容添加到同一个数组中。
希望对您有所帮助
你为什么不让 jackson mapper 施展魔法呢?
那时您唯一需要的就是适当的 DTO 类。
过去我已经将 json 文件从 url 解析到本地 sqlite 数据库,json 源如下所示:
[
{
"origin": "accommodation",
"parent": "",
"en": "Accommodation"
},
{
"origine": "book",
"parent": "shopping",
"en": "Book"
},
{
"origin": "university",
"parent": "education",
"en": "University"
}
]
但现在好像不一样了。我验证了以下 json 文件,因此我确定它是有效的 json,但它的格式不同,所以我不知道如何以正确的方式解析它。此外,这次我会将内容放在 ArrayList 中。这是 json 文件:
{
"city1": {
"item1": {
"score": 6196.58,
"step": 0.00423,
"name": "User 1",
"form": "yellow"
},
"item2": {
"score": 106.86,
"step": 2.5822,
"name": "User 2",
"form": "yellow"
},
"item3": {
"score": 671.48,
"step": 0.387,
"name": "User 3",
"form": "yellow"
},
},
"misc": {
"online_users": {
"kind1": 18,
"kind2": 3
},
"ops": [
""
]
},
"city2": {
"item1": {
"score": 6196.58,
"step": 0.00405,
"name": "User 1",
"form": "yellow"
},
"item2": {
"score": 179563.93,
"step": 0.000138,
"name": "User 2",
"form": "yellow"
},
"min_size": {
"line": 10
},
"out_of_sync": [
"0e888069530497506433b5f0cacb",
"b428fa3a9b9e13cf8b26196bfcc7",
"f42442a2e46523f059809f83f1a9"
],
},
}
你能告诉我如何处理这些值以及如何放入一些数组列表吗?
有多种方法可以做到这一点,但我会post我认为最合理的方法。如果您不介意将它放在单独的数组中,您可以这样做:
String stringOfJSONCode = <read in the JSON here>;
JSONObject json = new JSONObject(stringOfJSONCode);
Iterator<String> iter = json.keys();
while (iter.hasNext()) {
String key = iter.next();
try {
Object value = json.get(key);
} catch (Exception e) {
}
}
您需要使用迭代器来遍历 JSONObject。您可以使用任何其他循环来遍历 JSONArray。这将遍历外部对象,如 city1、misc、city2。密钥将是 city1、misc 或 city2。 如果你想获得这些,只需将其添加到 'try'
JSONObject object = json.getJSONObject(key);
or
JSONArray array = json.getJSONArray(key);
取决于你想得到什么。获得这些后,您可以执行以下操作:
JSONObject city1 = object.getJSONObject("item1");
List<String> jsonList = new ArrayList<String>();
jsonList.add(object.getDouble("score"));
jsonList.add(object.getDouble("step"));
jsonList.add(object.getString("name"));
jsonList.add(object.getString("form"));
如果您不确定它是 item1 还是其他什么,您可以使用迭代器再次遍历它并动态添加每个项目。您也可以进行另一个 try-catch,尝试获取一个 JSONArray,如果它不是一个数组,它将进入 catch,然后遍历该对象。
您还可以制作哈希图或二维数组,将所有内容添加到同一个数组中。
希望对您有所帮助
你为什么不让 jackson mapper 施展魔法呢?
那时您唯一需要的就是适当的 DTO 类。