使用JavaScript实现遍历json的value

在JavaScript中,可以使用递归的方式遍历JSON对象的所有值。你可以使用typeof操作符来确定当前值的类型,如果是对象或数组,则可以再次递归调用来遍历嵌套的值。以下是一个示例的JavaScript代码来实现这个功能:

function traverseJSON(obj) {
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      var value = obj[key];
      if (typeof value === "object") {
        traverseJSON(value);
      } else {
        console.log(value);
      }
    }
  }
}

// 示例用法
var json = {
  "key1": "value1",
  "key2": {
    "nestedKey1": "nestedValue1",
    "nestedKey2": "nestedValue2"
  },
  "key3": ["arrayValue1", "arrayValue2"]
};

traverseJSON(json);

这个示例中,traverseJSON 函数接受一个JSON对象作为参数,并遍历它的所有值。如果值的类型是对象,则递归调用traverseJSON函数;如果值的类型是其他简单类型(比如字符串、数字等),则直接输出该值。你可以根据自己的具体需求对该函数进行适当的修改。

要求输出结果格式为 "key1.key2....": "value"

在遍历时,记录当前路径并在输出时使用该路径作为键。以下是相应的修改后的代码:

function traverseJSON(obj, path = '') {
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      var value = obj[key];
      var newPath = path + (path !== '' ? '.' : '') + key;
      
      if (typeof value === "object") {
        traverseJSON(value, newPath);
      } else {
        console.log('"' + newPath + '": ' + JSON.stringify(value));
      }
    }
  }
}

// 示例用法
var json = {
  "key1": "value1",
  "key2": {
    "nestedKey1": "nestedValue1",
    "nestedKey2": "nestedValue2"
  },
  "key3": ["arrayValue1", "arrayValue2"]
};

traverseJSON(json);

在这个示例中,我们添加了一个新的参数 path 来记录当前的路径。在每次递归调用时,我们根据当前键和之前的路径来构建新的路径 newPath。然后,在输出时,我们使用 newPath 作为键,并输出对应的值。

注意,我们使用 JSON.stringify() 方法来处理值,以确保输出的值在字符串中正确地表示。

实现把格式为 "key1.key2....": "value" 的输出结果还原成json

要将格式为 "key1.key2....": "value" 的输出结果还原成 JSON 对象,你可以使用 split 方法将键拆分为一个键数组,然后使用遍历和递归的方式构建嵌套的对象。以下是一个示例的 JavaScript 代码来实现这个功能:

function restoreJSON(output) {
  var json = {};
  
  for (var key in output) {
    if (output.hasOwnProperty(key)) {
      var value = output[key];
      var keys = key.split('.');
      
      addToObject(json, keys, value);
    }
  }
  
  return json;
}

function addToObject(obj, keys, value) {
  var key = keys[0];
  
  if (keys.length === 1) {
    obj[key] = value;
  } else {
    if (!obj.hasOwnProperty(key)) {
      obj[key] = {};
    }
    
    addToObject(obj[key], keys.slice(1), value);
  }
}

// 示例用法
var output = {
  "key1.key2.nestedKey1": "nestedValue1",
  "key1.key2.nestedKey2": "nestedValue2",
  "key3": "value3"
};

var json = restoreJSON(output);
console.log(json);

在这个示例中,我们定义了一个 restoreJSON 函数,它接受一个格式为 "key1.key2....": "value" 的输出结果作为参数,然后将其还原为原始的 JSON 对象。我们也提供了一个辅助函数 addToObject,它用于将值按照键数组的顺序添加到递归构建的对象中。

在 restoreJSON 函数中,我们遍历输出结果,对于每个键值对,我们使用 split 方法将键拆分为键数组,然后调用 addToObject 函数将值添加到递归构建的 JSON 对象中。

最后,我们将还原后的 JSON 对象打印出来。你可以根据自己的需求对该函数进行适当的修改。

文章作者: 小森森
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小森森博客
源码 博客 JavaScript 技术 源码 经验
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝