【问题标题】:How to add new fields to existing json如何将新字段添加到现有 json
【发布时间】:2020-01-14 02:53:11
【问题描述】:

我有这样的输出 json

[

"city": [
    {
      "street": "street"
      "zip": "223344"
    }
  ]
    "document": [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "12345678",
      "file_name": "test.xml"
    }
  ]
]

我想在“文档”中添加新字段,这样新的输出就会像这样

[

"city": [
    {
      "street": "street"
      "zip": "223344"
    }
  ]
    "document": [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "12345678",
      "file_name": "test.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "123456789",
      "file_name": "test2.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "1234567800",
      "file_name": "test3.xml"
    }
  ]
]

如何添加新字段? 我尝试在后面的代码的帮助下做到这一点,但不幸的是我没有得到正确的结果

payload map(value) -> value ++
document: vars.documentsInfo map {
    date: $.createdAt,
    id: $.id,
    file_name: $.name
  }

【问题讨论】:

  • 您使用的是哪个版本的 dataweave?
  • 您的 JSON 无效。另外,我们不知道 vars.documentsInfo 是什么。
  • vars.documentsInfo 它是数组,我有我之前指出的字段的值,json 这是我描述的结构的唯一示例,我想在其中添加此信息

标签: dataweave mulesoft


【解决方案1】:

如果您使用的是 dw 2.0 和 mule runtime 4.2.2(或更高版本),您可以使用 update 功能。

输入

[
  {
    "city": [
      {
        "street": "street",
        "zip": "223344"
      }
    ]
  },
  {
    "document": [
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "12345678",
        "file_name": "test.xml"
      }
    ]
  }
]

数据编织脚本

%dw 2.0
import * from dw::util::Values
output application/json
var data = [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "123456789",
      "file_name": "test2.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "1234567800",
      "file_name": "test3.xml"
    }
]
---
payload update "document" with flatten(payload.document + data)

输出

[
  {
    "city": [
      {
        "street": "street",
        "zip": "223344"
      }
    ]
  },
  {
    "document": [
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "12345678",
        "file_name": "test.xml"
      },
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "123456789",
        "file_name": "test2.xml"
      },
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "1234567800",
        "file_name": "test3.xml"
      }
    ]
  }
]

【讨论】:

    【解决方案2】:

    输入负载:

    {
      "city": [
        {
          "street": "street",
          "zip": "223344"
        }
      ],
      "document": [
        {
          "date": "2020-01-10T04:04:01-08:00",
          "id": "12345678",
          "file_name": "test.xml"
        }
      ]
    }
    

    一个名为“documentsInfo”的流变量:

    [
        {
          "date": "2020-01-10T04:04:01-08:00",
          "id": "123456789",
          "file_name": "test2.xml"
        },
        {
          "date": "2020-01-10T04:04:01-08:00",
          "id": "1234567800",
          "file_name": "test3.xml"
        }
    ]
    

    数据编织:

    %dw 2.0
    output application/json
    ---
    {
        city: payload.city,
        documents: payload.document ++ vars.documentsInfo
    }
    

    产生输出:

    {
      "city": [
        {
          "street": "street",
          "zip": "223344"
        }
      ],
      "documents": [
        {
          "date": "2020-01-10T04:04:01-08:00",
          "id": "12345678",
          "file_name": "test.xml"
        },
        {
          "date": "2020-01-10T04:04:01-08:00",
          "id": "123456789",
          "file_name": "test2.xml"
        },
        {
          "date": "2020-01-10T04:04:01-08:00",
          "id": "1234567800",
          "file_name": "test3.xml"
        }
      ]
    }
    

    【讨论】:

      【解决方案3】:

      不幸的是,对于 dataweave,目前没有“更新”数组、字段或对象的好方法。因此解决方法是保存初始值,将其与要添加到文档数组的新对象组合,删除初始信息并重新添加组合值。我在这里使用 dw2.0 中的do 这样做了,希望对您有所帮助:

      %dw 2.0
      output application/json
      var obj = {
        "city": [
          {
            "street": "street",
            "zip": "223344"
          }
        ],
        "document": [
          {
            "date": "2020-01-10T04:04:01-08:00",
            "id": "12345678",
            "file_name": "test.xml"
          }
        ]
      }
      
      var documents = [
          {
            "date": "2020-01-10T04:04:01-08:00",
            "id": "123456789",
            "file_name": "test2.xml"
          },
          {
            "date": "2020-01-10T04:04:01-08:00",
            "id": "1234567800",
            "file_name": "test3.xml"
          }
      ]
      
      
      ---
      do {
          var originalDoc = obj.document
          var newDocumentsArray = documents ++ originalDoc
          ---
          (obj - "document") ++ {documents: newDocumentsArray}
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-22
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 2018-02-08
        • 2020-08-15
        • 2013-10-26
        相关资源
        最近更新 更多