javascript - 有没有简单的方法来回转换这个 JSON?

标签 javascript json postman

我们正在使用 Postman 进行 API 测试。我们返回的一些对象非常冗长且不易处理,所以我想创建一个辅助方法使它们更简洁一些。我知道有各种各样的转换库,比如 node-json-transform , selecttransform , jsontransforms等等,但不幸的是我只能使用 Postman Sandbox libraries和 Vanilla JS。

我正在寻找最简单的(最少的 loc 和函数)方法来转换此对象:

var verbose = [
    {
        "Key": "Name",
        "Value": "John Doe",
        "Instance": 1
    },
    {
        "Key": "Age",
        "Value": "33",
        "Instance": 1
    },
    {
        "Key": "Child",
        "Value": "Jane",
        "Instance": 1
    },
    {
        "Key": "Child",
        "Value": "Rocky",
        "Instance": 2
    }];

进入这个:

var concise =  {
    "Name": "John Doe",
    "Age": "33",
    "Child": ["Jane", "Rocky"]
};

然后再次回到冗长的形式。

我已经尝试了对每个对象进行 foreach-ing 并将属性/值添加到新对象的 native 方法,但是当我到达多实例键/值对时,它很快就变丑了。我可以想象有一种使用 map/reduce 的更简单的方法,但我不熟悉这些方法。

最佳答案

根据我对您问题的理解,您希望从verbose 对象数组创建键值对。但是,如果存在键冲突,则应将值转换为数组。

考虑到这一点,您将必须:

  1. 使用 forEach 遍历您的对象数组。
  2. 如果键不冲突,我们简单地创建一个新的键值对
  3. 如果键冲突,那就有点棘手了:
    • 如果键冲突并且这是第一次出现,我们将键值对中的值转换为数组
    • 如果键冲突并且这不是第一次出现,我们知道我们正在查看一个数组
    • 现在我们肯定有一个数组,所以我们将我们的值放入其中

请参阅下面的概念验证:

var verbose = [{
    "Key": "Name",
    "Value": "John Doe",
    "Instance": 1
  },
  {
    "Key": "Age",
    "Value": "33",
    "Instance": 1
  },
  {
    "Key": "Child",
    "Value": "Jane",
    "Instance": 1
  },
  {
    "Key": "Child",
    "Value": "Rocky",
    "Instance": 2
  }];

var concise = {};
verbose.forEach(function(i) {
  var key = i['Key'];
  var value = i['Value'];
  
  // If item exists, we want to convert the value into an array of values
  if (key in concise) {
    var item = concise[key];
    
    // If it is not an array already, we convert it to an array
    if (!Array.isArray(item))
      item = [item];
      
    item.push(value);
    concise[key] = item;
  }
  
  // If item does not exist, we simply create a new key-value pair
  else {
    concise[key] = value;
  }
});
console.log(concise);

关于javascript - 有没有简单的方法来回转换这个 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54902991/

相关文章:

java - JSP 中的 JSON 和 Jquery 树

laravel - Flutter - 使用 laravel 获取方法 api

javascript - 如何防止 jQuery onScroll 在scrollTo之后触发

javascript - 如何设置默认时间和分钟

json - 为 swagger 指定的模型架构无效

automated-tests - Q- postman : How to clear collectionvariables between tests

postman - 无法使用 client_credentials grant_type 发送请求

javascript - 如何从场景中删除对象

javascript - Javascript 中的 S3 waitUntilObjectExists

javascript - 将 JSON 文件转换为 Javascript 对象