postman - Postman - 从一个 JSON 中获取属性和值来创建另一个 JSON
问题描述
这与我这里的旧票有关!但现在我需要变得更先进。我只需要获取某些属性及其值(来自第一个响应 JSON)来创建另一个 JSON(以及一些要在新 JSON 中替换的值)。
即在下面的响应 JSON 中,我需要遍历所有“项目”(我事先不知道可以有多少),并且只获得Id + value
, 和Status+value
每个项目。然后构建另一个新的 JSON,其中 top 属性将被调用Products
而不是Variations
,并且仅包含Id+value
and Status+*NewValue*
。
第一个响应 JSON:
"Variations":[
{
"ItemIds":[
"xxx"
],
"Items":[
{
"Id":"67-V1",
"GuId":"xxx",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 1",
"Id":"67-V1"
},
{
"ItemIds":[
"yyy"
],
"Items":[
{
"Id":"67-V2",
"GuId":"yyy",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 2",
"Id":"67-V2"
},
{
"ItemIds":[
"zzz"
],
"Items":[
{
"Id":"67-V3",
"GuId":"zzz",
"Type":"Unit",
"Status":"Active"
}
],
"Name":"VAR 3",
"Id":"67-V3"
}
],
"ItemIds":[
],
"Items":[
],
"Name":"MAINP",
"Id":"67",
"Color":null
}
我想创建的新 JSON:
{
"Products":[
{
"Id":"67-V1",
"Status":"NonActive"
},
{
"Id":"67-V2",
"Status":"NonActive"
},
{
"Id":"67-V3",
"Status":"NonActive"
}
]
}
我制作了以下代码:
var jsonData = pm.response.json();
var newData;
var newDataGroup = "";
function replaceValues() {
_.each(jsonData.Variations, (arrayItem) => {
_.each(arrayItem.Items, (item) => {
if(item.Status !== "NonActive") {
item.Status = "NonActive";
console.log("arrayItem " + item.Status);
}
newData = "{ \"Id\":\"" + item.Id + "\", " + " \"Status\":\"" + item.Status + "\"},";
newDataGroup = newDataGroup + newData;
});
});
newDataGroup = "{ \"Products\": [ " + newDataGroup + " ] }";
}
pm.test("Run Replace", replaceValues ());
console.log("newDataGroup Final: " + newDataGroup);
var newJson = JSON.parse(newDataGroup);
console.log("newJson: " + newJson);
这是我的结果(基于上面的代码),但是如何处理最后一个,
呢?
{
"Products":[
{
"Id":"67-V1",
"Status":"NonActive"
},
{
"Id":"67-V2",
"Status":"NonActive"
},
{
"Id":"67-V3",
"Status":"NonActive"
},
]
}
解决方案
似乎这里是最终的代码,可以解决问题。虽然最有可能,但不是最优雅的,但可以完成这项工作。如果有人可以提出更优雅的方式,将不胜感激。
var jsonData = pm.response.json();
var newData;
var newDataGroup = "";
function replaceValues() {
_.each(jsonData.Variations, (arrayItem) => {
_.each(arrayItem.Items, (item) => {
if(item.Status !== "NonActive") {
item.Status = "NonActive";
}
newData = "{ \"Id\":\"" + item.Id + "\", " + " \"Status\":\"" + item.Status + "\"},";
newDataGroup = newDataGroup + newData;
});
});
newDataGroup = newDataGroup.slice(0, -1);
newDataGroup = "{ \"Products\": [ " + newDataGroup + " ] }";
}
pm.test("Run Replace", replaceValues ());
var newJson = JSON.parse(newDataGroup);
推荐阅读
- sql - 如何通过 SQL 查询仅获取过去 3 年的前 4 个月数据?
- typescript - 我可以在单独的文件中声明 TypeScript 接口并在不导入的情况下使用它吗?
- r - 矩阵乘法而不丢失 xts 属性
- node.js - TypeError:csv.fromPath 不是函数
- r - 如何在 R 中编写分段生存模型(例如带有外推尾部的 Kaplan-Meier 曲线)
- c# - 我想在控制台应用程序中获取 k 和 k2 中书籍的价格,但代码不起作用
- node.js - 时刻js计算从现在到现在的时间差异
- c++ - 具有 unique_ptr 的移动和运算符
- weka - 如何修复“按类别的详细准确度”?它显示问号
- r - 在 ggplot2 中创建后更改比例图例标签