如何在未知键路径的情况下更新JSON对象中的lat与long值
嘿,我完全懂你现在的困扰——要在结构不确定、数组索引还可能变动的JSON里,精准找到唯一的lat和long键并更新它们,试了好几种循环递归都没搞定,确实让人挠头。别慌,我给你分享一个靠谱的递归遍历方案,专门解决这种未知路径的键值更新问题!
核心思路:深度递归遍历整个JSON结构
JSON本质就是对象和数组的嵌套组合,我们只需要写一个递归函数,逐层遍历每一个元素:
- 如果当前遍历到的是对象,就检查它的每一个键;如果键是
lat或long,就替换成新值;如果对应的值还是对象/数组,就继续递归进去。 - 如果当前遍历到的是数组,就遍历数组里的每一个元素,对每个元素递归执行同样的检查逻辑。
因为你明确说整个JSON里只有一个lat和一个long,所以完全不用担心重复匹配的问题,找到就直接更新就行。
示例代码(JavaScript)
这里用JavaScript实现,其他语言的思路是完全一致的,你可以照着转成自己需要的语言:
function updateLatLong(obj, newLat, newLong) { // 处理对象类型 if (typeof obj === 'object' && obj !== null && !Array.isArray(obj)) { for (const key in obj) { if (key === 'lat') { obj[key] = newLat; } else if (key === 'long') { obj[key] = newLong; } else { // 如果当前值还是嵌套结构,递归处理 updateLatLong(obj[key], newLat, newLong); } } } // 处理数组类型 else if (Array.isArray(obj)) { obj.forEach(item => { updateLatLong(item, newLat, newLong); }); } // 基本类型(字符串、数字等)直接跳过 return obj; }
使用示例
假设你的原始JSON对象是这样的:
const originalJson = { name: "某地点", details: { location: [ { info: "坐标", lat: 39.9042, long: 116.4074 } ] } };
调用函数更新坐标:
const updatedJson = updateLatLong(originalJson, 31.2304, 121.4737); console.log(updatedJson.details.location[0].lat); // 输出 31.2304 console.log(updatedJson.details.location[0].long); // 输出 121.4737
不管lat和long藏在多少层嵌套里,也不管数组索引怎么变,这个函数都能精准找到并更新它们。
额外说明
- 这个函数会直接修改原始对象,如果你不想改动原始数据,可以在函数开头先做一个深拷贝(比如用
JSON.parse(JSON.stringify(obj))),再对拷贝后的对象进行操作。 - 如果以后遇到多个
lat/long的场景,只需要加个计数判断,找到指定数量就停止递归即可,现在你的场景完全不需要这一步。
内容的提问来源于stack exchange,提问作者Ben Ahlander
相关产品推荐
相关产品推荐

