替换 JSON 对象中的值

7
我有一个JSON对象data从我的apicontroller返回,如下所示:
[  
  {"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); }
    });
});

Thanks,

2个回答

19
你需要进行全局替换:
var old = JSON.stringify(data).replace(/null/g, '"#"'); //convert to JSON string
var newArray = JSON.parse(old); //convert back to array

这样做将会继续替换null,直到到达结尾

正则表达式文档:

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

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


非常明显,虽然我自己遇到了麻烦。谢谢! - jerome

16

@JonathanCrowe的正则表达式解答是正确的,但这是否是正确的选择呢?特别是当您有许多项时,更好的选择是修改解析后的对象,而不是通过JSON.stringify运行它来实现正则表达式的解决方案:

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

除了更快,这不会意外替换您想要保留的其他 null,或者弄乱诸如 { text: "去零程序" } 这样的记录。


1
完全同意这一点,如果您只想替换空的“父”键,那么采用这种方法肯定更好,以避免任何不必要的副作用。 - Jonathan Crowe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接