無効なjsonから末尾のコンマを削除します(有効にするため)。

無効なjsonから末尾のコンマを削除します(有効にするため)。

次のファイルがあるとします。

{
    "fruit": "Apple",
}

次の行に「}」が含まれている場合にのみ、行末のカンマを削除したいと思います。したがって、出力は次のようになります。

{
    "fruit": "Apple"
}

ただし、ファイルが以下のような場合。私は変更をしたくありません。,s 後に来ないから}

{
    "fruit": "Apple",
    "size": "Large",
    "color": "Red"
}

sedがあれば何でもいいでしょう。

ベストアンサー1

この問題が発生する理由は、JSON形式がキーやデータに表示されないスペースを気にしないためです。だから、

{ "key": "data" }

同じですか?

{ "key":
"data"
}

JSONファイルが「破損する」可能性を追加する場合

{ "key":
"data", }

データを解析するときにJSON形式の制約を軽減する方法を知っているJSONパーサー以外のものを使用して文書を正しく解析することは非常に困難です。

PerlJSONモジュールはこれを行い、結果をきれいに印刷することもできます。

$ cat file.json
{
    "fruit": "Apple",
}
$ perl -MJSON -e '@text=(<>);print to_json(from_json("@text", {relaxed=>1}), {pretty=>1})' file.json
{
   "fruit" : "Apple"
}

ここでは、全文文書を配列として読み込みます@text。その後、解析を軽減しながらそれをデコードします(これにより、JSONドキュメントには前にカンマがあり、}コメント]も含めることができます#)。次に、結果のPerlデータ構造をすぐにJSONにエンコードして印刷します。

他の例:

$ cat file.json
{
    "fruit": "Apple",   # a comment
    "stuff": [1, 2, 3,],
}
$ perl -MJSON -e '@text=(<>);print to_json(from_json("@text", {relaxed=>1}), {pretty=>1})' file.json
{
   "fruit" : "Apple",
   "stuff" : [
      1,
      2,
      3
   ]
}

きれいな印刷はありません。

$ perl -MJSON -e '@text=(<>);print to_json(from_json("@text", {relaxed=>1}))' file.json
{"fruit":"Apple","stuff":[1,2,3]}

(出力の末尾に改行文字はありません)

非常に大きな文書では、モジュールの増分解析機能を使用し、適切な変換スクリプトを作成する必要があるかもしれません。

おすすめ記事