jQuery使用字符串键更新JSON

时间:2018-06-03 18:00:57

标签: javascript arrays json string

我在数组变量中有JSON数据,我想通过字符串键更新此数组中的某些值。 这是我的数组的样子:

{
    "all": [
        {
            "image":{
                "URL":"img/img1.jpeg",
                "font": "sfsdfsdf",
                "color": "sfsdfs"
            },
            "music": {
                "URL":"fsfsfd",
                "time": {
                    "start":"sfsdf",
                    "end":"qdqsd"
                }
            }
        },
        {
            "image":{
                "URL":"img/img2.jpeg",
                "font": "sfsdfsdf",
                "color": "sfsdfs"
            },
            "music": {
                "URL":"fsfsfd",
                "time": {
                    "start":"sfsdf",
                    "end":"qdqsd"
                }
            }
        }
    ]
}

我有一个第二个数组,其路径已经拆分了我要更新的密钥:

var path = ["all", 0, "image", "font"]

目前我只是循环path变量并在我的JSON数据中搜索密钥是否存在。 但我绝对不知道如何在不改变数组模式的情况下更新我的JSON数组......

例如,我想将myArray[all][0][image][font]值替换为“我的其他值”

最终目标是更新我的JSON数组并重写JSON文件。

编辑:

我在这里找到了解决方案:Dynamically updating a JavaScript object from a string path

1 个答案:

答案 0 :(得分:0)

首先,值得注意的是,这与jQuery无关。

无论如何,一种简单的方法是使用_.get()中的Lodash功能。它完全符合您的要求。

这也是一段非常简单的代码,但Lodash还有许多其他优秀且经过良好测试的实用程序功能,因此值得您熟悉它。这是一个测试:

let data = {
    "all": [
        {
            "image":{
                "URL":"img/img1.jpeg",
                "font": "sfsdfsdf",
                "color": "sfsdfs"
            },
            "music": {
                "URL":"fsfsfd",
                "time": {
                    "start":"sfsdf",
                    "end":"qdqsd"
                }
            }
        },
        {
            "image":{
                "URL":"img/img2.jpeg",
                "font": "sfsdfsdf",
                "color": "sfsdfs"
            },
            "music": {
                "URL":"fsfsfd",
                "time": {
                    "start":"sfsdf",
                    "end":"qdqsd"
                }
            }
        }
    ]
};

let path = [ "all", 0, "image", "font" ];

let value = _.get( data, path );

console.log( value );
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>