LoginSignup
5
1

More than 5 years have passed since last update.

【Java】【jackson】JSONをパースする際に末尾カンマ(ケツカンマ・trailing comma)に対応する。

Last updated at Posted at 2017-06-21

JavaでJSONをパースする場合、jacksonというライブラリが良く使われるかなっと勝手に思っています。
(なんでJavaにJSONを扱う標準ライブラリが無いんだ!?EE8のみ対応とか無くね?という愚痴はおいておいて)

このjacksonを使って、いわゆる「ケツカンマ」「末尾カンマ」とかいわれている書き方をしたJSONをparse出来るようにする方法について書きます。

正式リリースではないようです。

まず現時点(2017/6/22)でのjacksonの正式リリースは2.8系で、2.8系では末尾カンマには対応できないようです。
ALLOW_MISSING_VALUESというOptionで惜しいところまでできるようですが、いわゆる末尾カンマの対応とは言えません。

末尾カンマ(ケツカンマ・trailing comma)

ES5や、最近のJava(いつからか忘れた)では末尾カンマを無視するようになりましたね。

js
let obj = {
        key1: 1,
        key2: 2,
    };
let arr = [
        1,
        2,
    ];
Java
String[] ss = new String[] {
        "a",
        "b",
    };
//・・・
enum KIND {
    A,
    B,
}

みたいな記述ができます。

(JSONの正式でどうなってるかはちゃんと調べていませんが)

通常のjacksonでのJSONパースで末尾カンマがあるとシンタックスエラーになりますが、
実はOptionとかで対応出来るんじゃないかと調べてみました。

jacksonの対応

下記のissueを見ると対応するようですね。

Add JsonParser.ALLOW_TRAILING_COMMA to work for Arrays and Objects

ただ正式対応はまだな様子で、2.9.0.pr系を使うことで実現できるようです。

mavenならば、以下のように記述します。

pom.xml
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0.pr4</version>
</dependency>

2.9.0系を使ったうえで、以下のようにObjectMapperのALLOW_TRAILING_COMMAという設定をすることで対応できるようです。

ObjectMapper mapper = new ObjectMapper().configure(JsonParser.Feature.ALLOW_TRAILING_COMMA, true);
Object obj = mapper.readValue(json, Object.class);

ケツカンマでググってもあまり出てこない。

個人的に「ケツカンマ」って呼んでたのですが、ググってもあまり出てこないですね。
日本語的には「末尾カンマ」なのでしょうか?ただ「jackson 末尾カンマ」でググってもこの対応方法は簡単に出てきませんでした。
最終的に「jackson trailing comma」でググったら出てきました。

「ケツカンマ」を調べるときは「trailing comma」でググること!というのが今回の個人的な教訓です。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1