使用尾随逗号处理多行 json
Process multi-line json with trailing commas
我在文件中有 JSON,其文本内容如下:
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
},
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}
请注意,此示例有 2 条记录,每条记录分为多行,每行之间用逗号分隔。
记录之间的逗号分隔符使得处理变得困难,例如与 jq:
$ cat myfile.json | jq -s
解析错误:第 9 行“,”之前的预期值...
或 python:
import json
with open("alert_feedback_20220424.json", "r") as f:
j = json.load(f)
json.decoder.JSONDecodeError:额外数据:第 9 行...
最终我真的想用spark读取这个数据:
spark.read.option(
'sep', ','
).option(
'header', False
).option(
'multiLine', True
).csv(
'file://my/project/data/myfile.json'
)
但这似乎没有正确解析 json。我会根据要求添加详细信息。
已尝试解决方案的链接:
- Python: Change multi-line json String to single line
如何以编程方式删除每条 JSON 记录后的逗号,或者如何格式化此 json 以便正确解析?
使用 jq
,使用 -R
选项将整个文件作为原始文本读取,使用 -s
选项将其作为一个长字符串接收,将该字符串括在括号中,然后使用 fromjson
从 JSON 解码它。您现在应该有一个有效的数组。
jq -Rs '"[\(.)]" | fromjson' myfile.json
[
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
},
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}
]
使用 .[]
来表示单个项目(中间没有逗号):
jq -Rs '"[\(.)]" | fromjson[]' myfile.json
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}
我在文件中有 JSON,其文本内容如下:
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
},
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}
请注意,此示例有 2 条记录,每条记录分为多行,每行之间用逗号分隔。
记录之间的逗号分隔符使得处理变得困难,例如与 jq:
$ cat myfile.json | jq -s
解析错误:第 9 行“,”之前的预期值...
或 python:
import json
with open("alert_feedback_20220424.json", "r") as f:
j = json.load(f)
json.decoder.JSONDecodeError:额外数据:第 9 行...
最终我真的想用spark读取这个数据:
spark.read.option(
'sep', ','
).option(
'header', False
).option(
'multiLine', True
).csv(
'file://my/project/data/myfile.json'
)
但这似乎没有正确解析 json。我会根据要求添加详细信息。
已尝试解决方案的链接:
- Python: Change multi-line json String to single line
如何以编程方式删除每条 JSON 记录后的逗号,或者如何格式化此 json 以便正确解析?
使用 jq
,使用 -R
选项将整个文件作为原始文本读取,使用 -s
选项将其作为一个长字符串接收,将该字符串括在括号中,然后使用 fromjson
从 JSON 解码它。您现在应该有一个有效的数组。
jq -Rs '"[\(.)]" | fromjson' myfile.json
[
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
},
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}
]
使用 .[]
来表示单个项目(中间没有逗号):
jq -Rs '"[\(.)]" | fromjson[]' myfile.json
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}
{
"id": "01",
"Variables": [
{
"Name": "myvar",
"Value": "15"
}
]
}