是否有方法将根键元素的值转换为JSON字符串?



我有JSON文件转储,我需要将它们推送到数据库中。表结构和一切都准备好了,但我需要通过将根级键的值转换为字符串来将JSON转换为其等效的表结构,而不管值中存在什么,即整数,浮点数,字符串,JSON数组或JSON对象。

举例说明

{
"k1": 10,
"k2": "KEY2",
"k3": [],
"k4": -55.6,
"k6": { "k7": 1, "k8": [{ "k9": "true", "k10": "false" }] },
"k11": "THIS IS VERY LONG MESSAGE OF CHARACTERS UPTO 1024 BYTES"
}

和转换后的JSON需要作为。

{
"k1": "10",
"k2": "KEY2",
"k3": "[]",
"k4": "-55.6",
"k6": "{ "k7": 1, "k8": [{ "k9": "true", "k10": "false" }] }",
"k11": "THIS IS VERY LONG MESSAGE OF CHARACTERS UPTO 1024 BYTES"
}

用双引号括起除了不触及根级值的子值的字符串。

如果有一个bash兼容的代码,那么它是非常受欢迎的。

如果您可以使用jq工具,可以在这里很好地使用:

$ jq 'map_values(if type == "number" then tostring else . end)' data.json
{
"k1": "10",
"k2": "KEY2",
"k3": [],
"k4": "-55.6",
"k6": {
"k7": 1,
"k8": [
{
"k9": "true",
"k10": "false"
}
]
},
"k11": "THIS IS VERY LONG MESSAGE OF CHARACTERS UPTO 1024 BYTES"
}

如果确实想要将结构体中更深的整数变成字符串,还有:

$ jq 'walk(if type == "number" then tostring else . end)' data.json
{
"k1": "10",
"k2": "KEY2",
"k3": [],
"k4": "-55.6",
"k6": {
"k7": "1",
"k8": [
{
"k9": "true",
"k10": "false"
}
]
},
"k11": "THIS IS VERY LONG MESSAGE OF CHARACTERS UPTO 1024 BYTES"
}

https://stedolan.github.io/jq/manual/v1.6/

jq 'map_values(if type == "number" or type == "array" or type == "object" then tostring else . end)' input_json|sed 's/\"/"/g'
{
"k1": "10",
"k2": "KEY2",
"k3": "[]",
"k4": "-55.6",
"k6": "{"k7":1,"k8":[{"k9":"true","k10":"false"}]}",
"k11": "THIS IS VERY LONG MESSAGE OF CHARACTERS UPTO 1024 BYTES"
}

最新更新