json 用于小写嵌套特定键的震动变换

l0oc07j2  于 2023-03-31  发布在  其他
关注(0)|答案(3)|浏览(104)

我有一个JSON输入:

{
  "levelOne": [
    {
      "leveltwo": {
        "levelThree": [
          {
            "type": "typeOne",
            "leveltwo": {
              "Id": "101000094794",
              "Id2": "101000013207"
            }
          },
          {
            "type": "typeTwo",
            "leveltwo": {
              "Id": "101000013207",
              "Id2": "101000013207"
            }
          }
        ]
      }
    }
  ]
}

是否有一个jolt规范,可以将每个键都小写,包括嵌套对象中的键?(在这种情况下是leveltwo下的键)

{
  "levelone": [
    {
      "leveltwo": {
        "levelThree": [
          {
            "id": "101000094794",
            "id2": "101000013207",
            "type": "typeOne"
          },
          {
            "id": "101000013207",
            "id2": "101000013207",
            "type": "typeTwo"
          }
        ]
      }
    }
  ]
}

目前,我使用以下规范(jolt模板):`

[
  {
    "operation": "shift",
    "spec": {
      "levelOne": {
        "*": {
          "leveltwo": {
            "id": "&3[&2].leveltwo.id",
            "levelThree": {
              "*": {
                "leveltwo": {
                  "Id": "&6[&5].leveltwo.&3[&2].id",
                  "Id2": "&6[&5].leveltwo.&3[&2].id2"
                },
                "type": "&5[&4].leveltwo.&2[&1].type"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "$": "&1.key",
        "@": "&1.value"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "levelOne": {
        "key": "=toLower"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "value": "@(1,key)"
      }
    }
  }
]

预期结果(关键字应为较低级别Three、typeOne、typeTwo):

{
  "levelone": [
    {
      "leveltwo": {
        "levelthree": [
          {
            "id": "101000094794",
            "id2": "101000013207",
            "type": "typeone"
          },
          {
            "id": "101000013207",
            "id2": "101000013207",
            "type": "typetwo"
          }
        ]
      }
    }
  ]
}

谢谢!

xdyibdwo

xdyibdwo1#

您可以对每个需要大小写转换的对象键(本例中为levelOnelevelThree)重复应用连续的shift-modify-shift三元组,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "id": "&3[&2].&1.id",
            "*": {
              "*": {
                "*": {
                  "Id": "&6[&5].&1.&3[&2].id",
                  "Id2": "&6[&5].&1.&3[&2].id2"
                },
                "type": "&5[&4].&3.&2[&1].type"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "$": "&1.key",
        "@": "&1.value"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "key": "=toLower"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "value": "@(1,key)"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": {
              "$": "&4.&3.&2.&1.key",
              "@": "&4.&3.&2.&1.value"
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": {
              "key": "=toLower",
              "value": {
                "*": {
                  "type": "=toLower"
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": {
              "value": "&4[&3].&2.@(1,key)"
            }
          }
        }
      }
    }
  }
]
6rqinv9w

6rqinv9w2#

嗨Priyanka这个规范将解决你的问题。你可以在modify-overwrite-beta操作中使用=toLower case函数。

[
  {
    "operation": "shift",
    "spec": {
      "levelOne": {
        "*": {
          "leveltwo": {
            "levelThree": {
              "*": {
                "leveltwo": {
                  "*": { 
                    //unwraps the field key and value into 2 feilds(key,Value). 
                    "$": "levelOne.[#4].leveltwo.levelThree.[#2].leveltwo.key",
                    "@": "levelOne.[#4].leveltwo.levelThree.[#2].leveltwo.value"
                  }
                }
              }
            }
          }
        }
      }
    }
  }, {
    "operation": "modify-overwrite-beta",
    "spec": {
      "levelOne": {
        "*": {
          "leveltwo": {
            "levelThree": {
              "*": {
                "leveltwo": {
                  //Key is on right side using toLower to make it lowercase.
                  "key": "=toLower"
                }
              }
            }
          }
        }
      }
    }
  }, {
    "operation": "shift",
    "spec": {
      "levelOne": {
        "*": {
          "leveltwo": {
            "levelThree": {
              "*": {
                "leveltwo": {
                   // Forming the original fields from key and value fields
                  "value": "levelOne.[#6].leveltwo.levelThree.[#2].leveltwo.@(1,key)"
                }
              }
            }
          }
        }
      }
    }
  }
]
m528fe3b

m528fe3b3#

你可以确定所有的东西都是较低的震动规格。你可以修改每个locationkeys,或valuesmodify步骤。
请运行每个规范,看看发生了什么。

[
  {
    "operation": "shift",
    "spec": {
      "*": { // levelOne
        "*": { // 0
          "*": { // leveltwo
            "*": { // levelThree
              "*": { // 0, 1
                "type": {
                  "$": "[&2].keys"
                },
                "*": {
                  "$5": "[&2].location",
                  "$4": "[&2].location",
                  "$3": "[&2].location",
                  "$2": "[&2].location",
                  "@(1,type)": "[&2].values",
                  "*": {
                    "$": "[&3].keys",
                    "@": "[&3].values"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "keys|values|location": {
          "*": "=toLower"
        },
        "locatio*": "=join('-',@(1,location))"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "keys": "@(1,location).&1.&",
        "values": "@(1,location).&1.&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*-*-*-*": {
        "*": {
          "values": {
            "*": {
              "@": "&(4,1)[&(4,2)].&(4,3).&(4,4)[&3].@(3,keys[&1])"
            }
          }
        }
      }
    }
  }
]

**注意:**如果您想防止降低您的值,您可以将modify中的这一行keys|values|location更改为keys|location

相关问题