我有一个JSON有效负载,我想添加软件架构名称(x86或x64)作为一个名为架构的新属性.

{
  "name": "T15P-GEN3",
  "software": {
    "x86": [
      {
        "name": "AAA",
        "version": "1.3.4",
        "uninstall": "MsiExec.exe /I{3A969900-CAD5-4FB8-B5D1-1F8D9028C6AA}"
      },
      {
        "name": "BBB",
        "version": "1.1.2",
        "uninstall": "MsiExec.exe /I{102C3B71-22B5-4484-8D1F-1C859CA6EE63}"
      },
      {
        "name": "CCC",
        "version": "1.1.4",
        "uninstall": "MsiExec.exe /I{D65355E4-021A-4B0C-B9A4-9D90F8C0D106}"
      }
    ],
    "x64": [
      {
        "name": "AAAA (x64)",
        "version": "24.01",
        "uninstall": "'C:\\Program Files\\AAAA\\Uninstall.exe'"
      },
      {
        "name": "BBBB (2023)",
        "version": "5.5.5.2811",
        "uninstall": "MsiExec.exe /I{92EC01FE-5C8D-4D03-B8D1-F0A2AEF14EB3}"
      },
      {
        "name": "CCCC",
        "version": "",
        "uninstall": "C:\\Program Files\\CCCC\\CCCC_x64.exe -?uninstall"
      }
    ]
  }
}

预期输出为:

{
  "name": "T15P-GEN3",
  "software": {
    "x86": [
      {
        "name": "AAA",
        "version": "1.3.4",
        "uninstall": "MsiExec.exe /I{3A969900-CAD5-4FB8-B5D1-1F8D9028C6AA}",
        "architecture": "x86"
      },
      {
        "name": "BBB",
        "version": "1.1.2",
        "uninstall": "MsiExec.exe /I{102C3B71-22B5-4484-8D1F-1C859CA6EE63}",
        "architecture": "x86"
      },
      {
        "name": "CCC",
        "version": "1.1.4",
        "uninstall": "MsiExec.exe /I{D65355E4-021A-4B0C-B9A4-9D90F8C0D106}",
        "architecture": "x86"
      }
    ],
    "x64": [
      {
        "name": "AAAA (x64)",
        "version": "24.01",
        "uninstall": "'C:\\Program Files\\AAAA\\Uninstall.exe'",
        "architecture": "x64"
      },
      {
        "name": "BBBB (2023)",
        "version": "5.5.5.2811",
        "uninstall": "MsiExec.exe /I{92EC01FE-5C8D-4D03-B8D1-F0A2AEF14EB3}",
        "architecture": "x64"
      },
      {
        "name": "CCCC",
        "version": "",
        "uninstall": "C:\\Program Files\\CCCC\\CCCC_x64.exe -?uninstall",
        "architecture": "x64"
      }
    ]
  }
}

我试过基于下面的帖子JOLT add object name into bodyJOLT add property based on name of another property进行实验,但无法让它以我想要的方式工作.

{
  "operation": "shift",
  "spec": {
    "software": {
      "*": {
        "*": {
          "@": "&3[].&",
          "$": "&3[].&.architecture"
        }
      }
    }
  }
}

我刚刚开始处理Jolt变换,但这个问题对我来说太难了.

推荐答案

您可以使用

[
  {
    "operation": "shift",
    "spec": {
      "*":"&", // the elements other than the software object
      "software": {
        "*": {
          "*": {
            "@": "&3.&2[&1]",
            "$1": "&3.&2[&1].architecture"
          }
        }
      }
    }
  }
]

哪里

  • 从一个上一级获得$份拷贝,从两个上一级获得$1份拷贝
  • [&1]内的&1循环数组的索引(例如,x86和x64)
  • &3&2分别代表键softwarex86x64

Json相关问答推荐

SWIFT中的网络经理

如何编写MongoDB查询以返回数组数组

属性错误:';ActivitiesClient';对象没有属性';base_url';

使用jq过滤复杂json对象中的数据

使用JQ合并JSON列表中的对象

Jolt - 如何比较 if else 条件的两个值

JOLT分裂和数组数据

在这种情况下我如何实现 UnmarshalJSON 并且只为一个接口字段定义特殊行为?

Jolt 变换 - 如何用字段值重命名字段?

NiFi 使用嵌套数组将 avro 转换为 JSON 数组格式

根据数据框中的其他列值将列表 json 对象插入行

N1QL 聚合查询 Couchbase

Json.NET SerializeObject 转义值以防止 XSS

如何在golang中获取 struct 的json字段名称?

Newtonsoft Json 将值 {null} 转换为类型System.Int32时出错

将json字符反序列化为枚举

将错误消息作为 JSON 对象发送

在 JSON.stringify() 的输出中隐藏空值

JSON.stringify 不会转义?

带有方法参数的 WCF webHttpBinding 错误. 最多可以在没有包装元素的情况下序列化一个主体参数