Как получить объект json с конкретными значениями ключа из столбца массива json?

Для лучшей производительности и для вставки замещающих значений в правильное положение используйте indexOf(o) , remove(index) и addAll(index, c) :

Демо

List attributes = new ArrayList<>(Arrays.asList("A", "B", "*", "C"));
Collection additionalValues = Arrays.asList("X","Y","Z");

int idx = attributes.indexOf("*");
if (idx != -1) {
    attributes.remove(idx);
    attributes.addAll(idx, additionalValues);
}

System.out.println(attributes);

Выход

[A, B, X, Y, Z, C]

Если заказ не введите значение возврата remove(o) :

if (attributes.remove("*"))
    attributes.addAll(additionalValues);

Выход

[A, B, C, X, Y, Z]

1
задан Jordan Youngs 18 January 2019 в 19:49
поделиться

1 ответ

Вы можете использовать JSON_TABLE для преобразования JSON в производную таблицу, из которой затем можно извлечь значения из:

SELECT j.value
FROM test t
JOIN JSON_TABLE(t.jsonStr, 
        '$[*]'
        COLUMNS(bool BOOLEAN PATH '$.bool',
                number INT PATH '$.number',
                value VARCHAR(20) PATH '$.value')) j                    
WHERE j.bool = true AND j.number = 1

Вывод:

value
world
[1113 ] Если вы также хотите получить индекс в пределах каждого значения JSON соответствующего value, вы можете добавить предложение FOR ORDINALITY к вашему JSON_TABLE, например:

SELECT j.idx, j.value
FROM test t
JOIN JSON_TABLE(t.jsonStr, 
        '$[*]'
        COLUMNS(idx FOR ORDINALITY,
                bool BOOLEAN PATH '$.bool',
                number INT PATH '$.number',
                value VARCHAR(20) PATH '$.value')) j
WHERE j.bool = true AND j.number = 1
[1114 ] Вывод:

idx     value
2       world

Демонстрация по dbfiddle

0
ответ дан Nick 18 January 2019 в 19:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: