【问题标题】:jQuery update JSON with string keysjQuery 使用字符串键更新 JSON
【发布时间】:2018-11-13 03:06:44
【问题描述】:

我在数组变量中有 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

【问题讨论】:

    标签: javascript arrays json string


    【解决方案1】:

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

    无论如何,一个简单的方法是使用来自Lodash_.get() 函数。它完全符合您的要求。

    这也是一段非常简单的代码,可以自己编写,但 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>

    【讨论】:

    • 我的目标不是获得我知道如何去做的路径的价值。我的目标是更新密钥路径并返回数组data 完成修改。 Lodash 能做到吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多