【问题标题】:Replacing values in JSON object替换 JSON 对象中的值
【发布时间】:2015-04-22 17:51:07
【问题描述】:

我的 apicontroller 返回了以下 JSON 对象 data

[  
  {"id":2,"text":"PROGRAMME","parent":null},
  {"id":3,"text":"STAGE","parent":2},
  {"id":4,"text":"INFRA","parent":2},
  {"id":5,"text":"SYSTEM","parent":3},
  {"id":6,"text":"STOCK","parent":3}, 
  {"id":7,"text":"DPT","parent":3},
  {"id":9,"text":"EXTERNAL","parent":null} 
]

我想用"parent":'"#"'替换"parent":null

我已经尝试了下面的代码,但它只是替换了第一次出现的"parent":null。如何替换所有 "parent":null 条目?

$(document).ready(function () {
    $.ajax({
        url: "http://localhost:37994/api/EPStructures2/",
        type: "Get",
        success: function (data) {
            var old = JSON.stringify(data).replace(null, "'#'"); //convert to JSON string
            var new = JSON.parse(old); //convert back to array
        },
        error: function (msg) { alert(msg); }
    });
});

谢谢,

【问题讨论】:

    标签: javascript arrays json stringify


    【解决方案1】:

    您需要将替换设为全局:

    var old = JSON.stringify(data).replace(/null/g, '"#"'); //convert to JSON string
    var newArray = JSON.parse(old); //convert back to array
    

    这样它将继续替换空值直到它到达末尾

    正则表达式文档:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

    另外,作为旁注,您应该避免使用new 作为变量名,因为它是 javascript 中的保留字,大多数浏览器不允许您使用它

    【讨论】:

    • 很明显,尽管我自己也遇到了麻烦。谢谢!
    【解决方案2】:

    @JonathanCrowe 的答案对于正则表达式是正确的,但这是正确的选择吗?特别是如果您有很多项目,您最好修改已解析的对象,而不是通过JSON.stringify 运行它以获得正则表达式解决方案:

    data.forEach(function(record) {
        if (record.parent === null) {
            record.parent = "#";
        }
    });
    

    除了更快之外,这不会意外替换您想要保留的其他空值,或弄乱{ text: "Denullification Program"} 之类的记录。

    【讨论】:

    • 完全同意这一点,如果您只想替换空的“父”键,那么使用这种方法肯定会更好,以避免任何不必要的副作用
    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 2019-09-17
    • 1970-01-01
    • 2023-03-20
    • 2021-05-13
    • 2021-06-14
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多