本当にただのメモ

なるべく Qiita に投稿しよう

JSON の Diff をとる

追記: ライブラリを作った。 Go のプログラム内で JSON を比較しやすくする - Qiita

 ー ー ー ー ー

API がやや冗長な感じがしてあんまり好きになれない。。が、これしか見つけられなかった。

package main

import (
    "encoding/json"
    "fmt"

    diff "github.com/yudai/gojsondiff"
    "github.com/yudai/gojsondiff/formatter"
)

func main() {
    a := []byte(`{"bar":2, "baz": 3, "foo":1}`)
    b := []byte(`{"foo":1, "foobar":4, "baz":{"foo":1}}`)

    differ := diff.New()
    d, err := differ.Compare(a, b)
    if err != nil {
        panic(err)
    }
    if d.Modified() {
        var aJson map[string]interface{}
        json.Unmarshal(a, &aJson)

        formatter := formatter.NewAsciiFormatter(aJson, formatter.AsciiFormatterConfig{})
        diffString, _ := formatter.Format(d)
        fmt.Print(diffString)
    }
}
 {
-  "bar": 2,
-  "baz": 3,
+  "baz": {
+    "foo": 1
+  },
   "foo": 1
+  "foobar": 4
 }