替换JSON对象中的值

时间:2015-02-20 22:28:20

标签: javascript arrays json stringify

我从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":null替换为"parent":'"#"'

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

<script>
     $(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); }
         });
     });
</script>

谢谢,

3 个答案:

答案 0 :(得分:14)

您需要将替换设为全局:

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中的保留字,大多数浏览器都不允许您使用

答案 1 :(得分:12)

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

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

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

答案 2 :(得分:0)

一个简单的班轮是:

let json = JSON.parse(JSON.stringify(data).replace(/null/g, '"#"'));