Javascript 如何在JSON中查找和替换值?

Javascript 如何在JSON中查找和替换值?,javascript,node.js,json,lodash,Javascript,Node.js,Json,Lodash,我有一个这样的物体: { "responses": { "firstKey": { "items": { "name": "test name one" } }, "anotherKey": { "items": { "name": "test name two" } }, "oneMoreKey": { "items": { "name": "

我有一个这样的物体:

{
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
}
我需要找到所有“name”键,仅当它以“test name”开头时才替换它的值,然后返回新的JSON对象:

{
  "responses": {
    "firstKey": {
      "items": {
        "name": "N/A"
      }
    },
    "anotherKey": {
      "items": {
        "name": "N/A"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
}

问题是通过对象的键不一致,即“firstKey”、“secondKey”。。。我试过ForEach,但似乎太麻烦了。。。所以我需要lodash或vanila JavaScript来替换这些值

像这样做。使用正则表达式转换为字符串替换(也将键添加到正则表达式),然后再转换回


var data = {
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
};

var originalMsg = JSON.stringify(data);
console.log(data)
console.log(originalMsg)
var updatedMsg = originalMsg.replace(/test name [a-z]*/g, "N/A");
console.log(updatedMsg)
var newObj = JSON.parse(updatedMsg); 
console.log(newObj);


像这样做。使用正则表达式转换为字符串替换(也将键添加到正则表达式),然后再转换回


var data = {
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
};

var originalMsg = JSON.stringify(data);
console.log(data)
console.log(originalMsg)
var updatedMsg = originalMsg.replace(/test name [a-z]*/g, "N/A");
console.log(updatedMsg)
var newObj = JSON.parse(updatedMsg); 
console.log(newObj);


应该迭代javascript对象,然后检查并替换名称的每个值。有一些检查,例如
hasOwnProperty()
,可以用来确保您没有迭代缺少“items”或“name”的对象,以便更好地处理错误

var data = {
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
};
给定上面的JSON,您可以使用一个简单的
for
语句进行迭代,然后检查每个名称是否有值并替换

for(var key in data.responses){
    if ((data.responses[key].items.name).match(/test name/)){
       data.responses[key].items.name = "N/A";
    } 
}
要检查您的更换,您可以将
数据
记录到控制台

console.log(JSON.stringify(data));

应该迭代javascript对象,然后检查并替换名称的每个值。有一些检查,例如
hasOwnProperty()
,可以用来确保您没有迭代缺少“items”或“name”的对象,以便更好地处理错误

var data = {
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
};
给定上面的JSON,您可以使用一个简单的
for
语句进行迭代,然后检查每个名称是否有值并替换

for(var key in data.responses){
    if ((data.responses[key].items.name).match(/test name/)){
       data.responses[key].items.name = "N/A";
    } 
}
要检查您的更换,您可以将
数据
记录到控制台

console.log(JSON.stringify(data));

也可以在解析过程中执行此操作:

var json=`{
“答复”:{
“第一键”:{
“项目”:{
“名称”:“测试名称一”
}
},
“另一个密钥”:{
“项目”:{
“名称”:“测试名称二”
}
},
“oneMoreKey”:{
“项目”:{
“姓名”:“约翰”
}
}
}
}`
var obj=JSON.parse(JSON,(k,v)=>k='name'&&&/^test name/.test(v)?'N/A':v)

console.log(obj)
也可以在解析过程中完成:

var json=`{
“答复”:{
“第一键”:{
“项目”:{
“名称”:“测试名称一”
}
},
“另一个密钥”:{
“项目”:{
“名称”:“测试名称二”
}
},
“oneMoreKey”:{
“项目”:{
“姓名”:“约翰”
}
}
}
}`
var obj=JSON.parse(JSON,(k,v)=>k='name'&&&/^test name/.test(v)?'N/A':v)

log(obj)
javascript对象是一棵树——尽管它可以是,也很可能是一个有向图——很可能是循环的,这意味着图中的节点指向自己的父节点。遵循一个循环可能导致永无止境的递归或循环

您希望使用
遍历
之类的方法来执行您所说的操作。它处理了所有使遍历图变得麻烦的事情——处理图中的循环等等

注意:给定给
travese
的回调函数不能是箭头函数(
()=>{…}
),因为该函数的
上下文是当前被检查节点的
遍历
上下文


遍历
上下文还允许您访问从根到当前节点的整个路径,以及到父节点的
遍历
上下文的向上链接。

javascript对象出于所有意图和目的都是一棵树——尽管它可能是,也可能是一个有向图——这很可能是循环的意思是图中的一个节点指向它自己的父节点。遵循一个循环可能导致无止境的递归或循环

你想用
遍历
这样的方法来做你所说的。它会处理所有让遍历图变得麻烦的事情——处理图中的循环等等

注意:给定给
travese
的回调函数不能是箭头函数(
()=>{…}
),因为该函数的
上下文是当前被检查节点的
遍历
上下文


遍历
上下文还允许您访问从根到当前节点的整个路径,以及父节点的
遍历
上下文的向上链接。

您有一个JavaScript对象。实际上没有“JSON对象”这样的东西.
forEach
太麻烦了?我的意思是,你只需要这些键,然后迭代一个数组。我不清楚你的具体问题是什么——如果你知道你想使用lodash,为什么不直接使用它呢?你基本上是在要求别人编写代码吗?你能发布你尝试过的内容以及你在我身上遇到的问题吗t拜托?我同意Dave的观点…代码讲义请告诉我如何使用lodash搜索以“xxxxx”开头的值。我将自己编写代码您有一个JavaScript对象。实际上没有“JSON对象”这样的东西.
forEach
太麻烦了?我的意思是,你只需要这些键,然后迭代一个数组。我不清楚你的具体问题是什么——如果你知道你想使用lodash,为什么不直接使用它呢?你基本上是在要求别人编写代码吗?你能发布你尝试过的内容以及你在我身上遇到的问题吗t拜托?我同意Dave…代码讲义给我一个想法,我如何用lodash搜索以“xxxxx”开头的值。我会自己编写代码谢谢@PraveenB。我看到了先将其字符串化的解决方案。我只是认为可以通过。find,.findindex..确定在这个小示例中可以这样做,但应该吗?你不是t实际计算SomeKey.items.name的值并进行更新。这将更新JSON@DanielGale我没有提供