Java json объект заменяет имена ключей - PullRequest
0 голосов
/ 18 апреля 2020

У меня Json вот так:

{
"_id" : ObjectId("5e99f6d16cbddf7dad26557f"),
"channel_id" : 49066,
"timestamp" : NumberLong(1580982302003),
"values" : {
    "some id" : "81151501",
    "some title" : "Some title",
    "some address" : "https://www.some-address.com",
    "new hash" : {
        "some value" : "5",
        "other value" : " 54.10 BRL"
    },
    "wrong values" : "This text have wrong & values & and netx is wrong too & and this &"
},
"null value" : null,
"zero integer" : 0
}

Мне нужно l oop через каждую клавишу и заменить пробелы на snake_case, например от other value до other_value

Кроме того, я хотел проверить каждое значение в l oop, заменив символ & на _, например:

с This text have wrong & values & and netx is wrong too & and this & до This text have wrong _ values _ and netx is wrong too _ and this _

Мой json объект сделан из:

JSONobject jsonObject = new JSONobject(jsonString)

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете перебирать ключи, нормализовать ключ и рекурсивно продолжать, пока значение является JSONObject. Если это не так, то вы также можете нормализовать значение. Таким образом, это будет выглядеть примерно так:

static JSONObject normalize(JSONObject object) throws JSONException {
    JSONObject result = new JSONObject();
    Iterator iterator = object.keys();

    while (iterator.hasNext()) {
        String key = (String) iterator.next();
        String normalizedKey = key.replace(" ", "_");

        Object inner = object.get(key);

        if (inner instanceof JSONObject) {
            result.put(normalizedKey, normalize((JSONObject) inner));
        } else if (inner instanceof String) {
            result.put(normalizedKey, object.getString(key).replace("&", "_"));
        } else {
            result.put(normalizedKey, inner);
        }
    }

    return result;
}

В последней версии библиотеки также есть возможность получить набор ключей, что позволит немного чище зациклить клавиши:

static JSONObject normalized(JSONObject object) {
    JSONObject result = new JSONObject();

    object.keySet().forEach(key -> {
        String normalizedKey = key.replace(" ", "_");
        Object value = object.get(key);

        if (value instanceof JSONObject) {
            result.put(normalizedKey, normalized((JSONObject) value));
        } else if (value instanceof String) {
            result.put(normalizedKey, ((String) value).replace("&", "_"));
        } else {
            result.put(normalizedKey, value);   
        }
    });     
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...