【问题标题】:Ordering of json objects after jolt transformation颠簸变换后json对象的排序
【发布时间】:2019-09-30 16:12:19
【问题描述】:

输入:

{

//The input json object

}

期望的输出

{

"Event1": "Value1",
"Event2": [
            // collection of json objects
          ],

"Event3": {
            //The input json object
          }

}

所以基本上输入 json 进入另一个 json 对象包装器的“Event3”。

这是我的规格:

[
  {
    "operation": "shift",
    "spec": {
      "@": "Event3"
    }
  },
  {
    "operation": "default",
    "spec": {
      "Event1": "Value1",
      "Event2": [
        // some objects
       ]
    }
  }
]

现在的问题是 - 上面的规范正在进行转换,但是对象的顺序被搞砸了,像这样:

{
"Event3": {
            //The input json object
          },
          
"Event2": [
            // some objects
          ],
"Event1": "Value1"

}

请建议我应该如何解决这个问题。

【问题讨论】:

    标签: json jolt


    【解决方案1】:

    您是否尝试过使用 sort 操作?

    [
      {
        "operation": "sort",
        "spec": {
          "*": ""
        }
      }
    ]
    

    认为这可能对你有用 ;)

    【讨论】:

    • 感谢您的回答。不过有一个小问题 - sort 将按属性名称的字母顺序排列它们;在我的例子中,我使用的名称 - Event1, Event2 .. 只是为了表示。我的实际 json 具有不同的属性名称。有没有办法通过指定属性名称来设置顺序?
    • 不这么认为。来自 jolts git 页面:github.com/bazaarvoice/jolt/blob/master/jolt-core/src/main/java/…“排序顺序为标准字母升序”。
    【解决方案2】:

    尝试在最后使用另一个shift 操作以使它们按所需的顺序排列。

    [
      {
        "operation": "shift",
        "spec": {
          "@": "Event3"
        }
        },
      {
        "operation": "default",
        "spec": {
          "Event1": "Value1",
          "Event2": [
            "ob1", "obj2"
            ]
        }
        },
      {
        "operation": "shift",
        "spec": {
          "Event1": "Event1",
          "Event2": "Event2",
          "Event3": "Event3"
        }
        }
    ]
    

    【讨论】:

      【解决方案3】:

      添加另一个移位操作,只需将每个字段从输入 json 复制粘贴到输出 json。

      [
        {
          "operation": "shift",
          "spec": {
            "@": "Event3"
          }
          },
        {
          "operation": "default",
          "spec": {
            "Event1": "Value1",
            "Event2": [
              "ob1", "obj2"
              ]
          }
          },
        {
          "operation": "shift",
          "spec": {
            "Event1": "&", //same as "Event1":"Event1",
            "Event2": "&",
            "Event3": "&"
          }
          }
      ]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        相关资源
        最近更新 更多