62509
# やりたいこと

RFC 違反の JSON を jq で処理したい。あるいは事前に RFC 準拠の JSON に変換したうえで jq で処理したい。

イメージとしては以下のような感じです。

```

    jq <何かオプション> '.' invalid.json
    
```

あるいは

```

    <何かツール> invalid.json | jq '.'
    
```

# 環境

  * Ubuntu 14.04.4 LTS
  * jq version 1.3

# 現象

以下のような JSON があります。これは RFC 違反です(末尾のカンマが余計)。よって jq からパースエラーと言われます。

```

    % echo '{"foo": "0xFF",}' | jq '.'
    parse error: Expected another key-value pair at line 1, column 16
    
```

末尾のカンマを削除すれば jq は JSON として解釈してくれます。

```

    % echo '{"foo": "0xFF"}' | jq '.' 
    {
      "foo": "0xFF"
    }
    
```

# 質問

例えば [JSON Formatter & Validator](https://jsonformatter.curiousconcept.com/)
というサイトでは、入力された文字列が JSON として正しいかどうか判定してくます。誤っている JSON ならばそれを正しい JSON
に整形してくれるオプション(「Fix JSON」)もあります。

この「JSON Formatter & Validator」で「Fix JSON」をおこなうのと同じようなことをおこなう方法( _オフラインのツール_
)は無いでしょうか？
CC BY-SA 4.0
2020-01-24T02:27:22.113
62507
2020-01-24T04:06:20.357
9592
question
json jq
RFC 違反の JSON を RFC 準拠に整形する方法。あるいは許容する方法はありませんか？
[jsonlint](https://github.com/Seldaek/jsonlint)
というPHP製のユーティリティがあるようです。[Ubuntu向けのパッケージ](https://packages.ubuntu.com/eoan/jsonlint)
も提供されていますが、お使いのバージョン(14.04.4)だと見つかりませんでした。

参考:  
[JSON Valdiator in Ubuntu 16.04 - Ask Ubuntu](https://askubuntu.com/q/876815)
CC BY-SA 4.0
2020-01-24T03:00:04.793
62508
2020-01-24T03:00:04.793
3060
62507
answer
jq の公式 wiki にある [FAQ](https://github.com/stedolan/jq/wiki/FAQ)
ではいくつかのツールが具体例と共に紹介されていました。

> : Is there a way to have jq keep going after it hits an error in the input
> file? Can jq handle broken JSON?
>
> A: Yes, though in general, preprocessing (e.g. using hjson or any-json)
> would be preferable. Also, there are more options if you have jq 1.5. （後略）
>
> （和訳）  
>  質問：入力を読んでいる最中にエラーが出ても jq に読ませ続ける方法はありますか？ 壊れた JSON を jq に扱わせることはできますか？
>
> 回答：はい。一般的には、hjson や any-json などを使って前処理をするのが望ましいです。また jq 1.5
> 以降であればいくつかオプションを利用することもできます。（後略）

  * hjson
  * any-json
  * relaxed-json
  * strip-json-comments
  * jsonlint
  * json5

2020年1月現在では、[FAQ ページ](https://github.com/stedolan/jq/wiki/FAQ)の一番下に詳細が書かれています。
CC BY-SA 4.0
2020-01-24T03:06:52.527
62509
2020-01-24T04:06:20.357
2020-06-17T08:14:45.997
-1
19110
62507
answer