Как вставить данные в JSON с использованием запроса? - PullRequest
1 голос
/ 07 апреля 2020

Мы предполагаем, что следующий json файл

{

    "id": "test",
    "child" : [
                {    
                 "id": "alpha",
                 "child":[]
                },
                {    
                 "id": "beta",
                 "child":[]
                }

              ]

}

В JavaScript как я могу вставить JSON объект в указанное c JSON расположение массива, используя запрос типа flavour

Я хочу вставить в ребенка, где идентификатор соседа альфа.

Я не хочу использовать позицию

Спасибо.

Ответы [ 2 ]

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

Вы можете написать рекурсивную функцию для вставки элемента по указанному индексу вашего JSON объекта, например, так:

const yourJSON = `
{

    "id": "test",
    "child" : [
                {
                 "id": "alpha",
                 "child":[]
                },
                {
                 "id": "beta",
                 "child":[]
                }

              ]

}
`;

function insertIntoChildJSON(sourceJSON, childId, childPosition, value) {
    function insertIntoChild(data, childId, childPosition, value) {
        if (data.id === childId) {
            data.child[childPosition] = value;
        } else {
            if (data.child.length > 0) {
                for (let i = 0; i < data.child.length; ++i) {
                    data.child[i] = insertIntoChild(
                        data.child[i],
                        childId,
                        childPosition,
                        value
                    );
                }
            }
        }

        return data;
    }

    const parsedSource = JSON.parse(sourceJSON);

    return JSON.stringify(
        insertIntoChild(parsedSource, childId, childPosition, value)
    );
}

console.log(
    insertIntoChildJSON(yourJSON, 'alpha', 1, { id: 'charlie', child: [] })
);

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

Предположим, file.json это ваша json строка

import objects from './file.json'

Для запросов вы можете придумать что-то вроде этого.

function query(column, value) {
  let children = objects.child
  return children.find(child => child[column] === value)
}

Для множественных возвратов (массив) , используйте filter вместо

function query(column, value) {
  let children = objects.child
  return children.filter(child => child[column] === value)
}

Тогда вставка данных будет:

function insert(column, value, insert) {
  if (insert) {
    let children = objects.child
    let item = children.find(child => child[column] === value)
    if (variable.constructor === Array) {
      item.child.push(...insert)
    } else {
      item.child.push(insert)
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...