为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用查询风格在 JSON 中插入数据?

如何使用查询风格在 JSON 中插入数据?

阿波罗的战车 2022-06-16 17:08:36
我们假设以下 json 文件{    "id": "test",    "child" : [                {                     "id": "alpha",                 "child":[]                },                {                     "id": "beta",                 "child":[]                }              ]}在 JavaScript 中,如何使用类似风味的查询将 JSON 对象插入特定的 JSON 数组位置我想插入邻居 id 为 alpha 的孩子。我不想使用位置
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您可以编写一个递归函数来在 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: [] })

);


查看完整回答
反对 回复 2022-06-16
?
桃花长相依

TA贡献1860条经验 获得超8个赞

假设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)

    }

  }

}


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信