如何将此 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 类。