You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在未知键路径的情况下更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:13:01