【问题标题】:Unable to transform a JSON Object into Array of objects using JOLT JSON library无法使用 JOLT JSON 库将 JSON 对象转换为对象数组
【发布时间】:2016-09-13 01:35:14
【问题描述】:

我必须转换的输入 JSON 如下:

{
  "Business": [
    {
      "Label": "Entertainment",
      "category": "Advert",
      "weight": "",
      "types": [
        "T1",
        "T2"
      ]
    },
    {
      "Label": "FMCG",
      "category": "Campaign",
      "weight": "",
      "types": [
        "T9",
        "T10"
      ]
    }
  ]
}

预期输出:

{
  "Business": [
    {
      "Label": "Entertainment",
      "category": "Advert",
      "weight": "",
      "types": "T1"
    },
    {
      "Label": "Entertainment",
      "category": "Advert",
      "weight": "",
      "types": "T2"
    },
    {
      "Label": "FMCG",
      "category": "Campaign",
      "weight": "",
      "types": "T9"
    },
    {
      "Label": "FMCG",
      "category": "Campaign",
      "weight": "",
      "types": "T10"
    }
  ]
}

我已经尝试了 JOLT github 帮助页面上提供的不同 JsonSpec。但我无法解决这个问题。任何帮助或指点将不胜感激。

【问题讨论】:

  • typess 输入/输出样本中的错字吗?
  • 是的,这是错字。我现在已经更正了。

标签: json jolt


【解决方案1】:

你必须做两个班次操作。

您希望根据“类型”数组中的条目数“复制”标签和类别。所以先这样做,进入一个临时的“bizArray”。

在一个临时的“typeArray”中记录哪个“type”与重复的Label和Category一起使用,它与bizArray具有相同的索引。

在第二个班次中,“加入”两个并行数组“bizArray”和“typesArray”以获得最终数组。

规格

[
  {
    "operation": "shift",
    "spec": {
      "Business": {
        "*": { // business array
          "types": {
            "*": { // type array
              "@2": "bizArray[]",  // make a copy of the whole biz object
              "@": "typesArray[]"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "bizArray": {
        "*": { // bizArray index
          "Label": "Business[&1].Label",
          "category": "Business[&1].category",
          "weight": "Business[&1].weight"
        }
      },
      "typesArray": {
        "*": "Business[&].types"
      }
    }
  }
]

【讨论】:

  • 谢谢米洛,这行得通!。但我无法理解这是如何工作的。这个库的文档非常复杂,对我来说毫无意义。我想我应该尝试另一个图书馆。
  • 干得好!我从来没有使用过 Jolt,但我昨晚看了这个,花了几个小时阅读文档并玩弄演示。我非常接近(我知道它需要两个shifts),但就是无法获得正确的最终产品。至少可以说,颠簸很有趣!
  • 谢谢。文档化是一件复杂的事情。 A)每个操作(故意)可以有不同的 DSL,因为这就是重点。也就是说,统治它们的单一 DSL 基本上只是 Java。 B)它是递归的,所有操作一次操作一个字段。因此“聚合”事物并处理数组是“困难的”/“钝的”。
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2020-10-02
  • 1970-01-01
相关资源
最近更新 更多