我在檔案中有 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。當我有時間要求時,我會添加詳細資訊。
嘗試的解決方案鏈接:
- 決議錯誤:第 71 行第 2 列的“,”之前的預期值
- Python:將多行json字串更改為單行
- 使用命令列工具洗掉結尾的 json 逗號
如何在每個 JSON 記錄后以編程方式洗掉此逗號,或者以其他方式格式化此 json 以正確決議?
uj5u.com熱心網友回復:
使用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"
}
]
}
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/465333.html
上一篇:將來自服務總線佇列觸發器的JSON訊息反序列化為C#物件
下一篇:htaccess重寫導致副作用
