)]}'
{
  "commit": "44b725c8b9f81052b046cf54cdcc10a7caa3cac0",
  "tree": "f16578da8e9128ad88bbac14355a162f59494565",
  "parents": [
    "bc2f9850cb27171e4280a64b13910e4a121fa660"
  ],
  "author": {
    "name": "Michael Pratt",
    "email": "mpratt@google.com",
    "time": "Tue Aug 11 16:01:41 2026 -0400"
  },
  "committer": {
    "name": "Michael Pratt",
    "email": "mpratt@google.com",
    "time": "Wed Aug 19 10:07:42 2026 -0700"
  },
  "message": "_content/doc/tutorial/json: add encoding/json/v2 tutorial\n\nAdd a tutorial introducing working with JSON in Go, using\nencoding/json/v2.\n\nThis tutorial is a direct descendant of the https://go.dev/blog/json,\nwhich was the previous canonical introduction to working with JSON.\n\nBy placing this a tutorial outside of the blog, it can be a living\ndocument, updated over time as things change. On the other hand, a blog\npost is better as a snapshot in time. The old blog post is left in\nplace, but with a note pointing to the newer tutorial.\n\nMost of the changes from the original blog post are pretty minor.\n\nLinks point to encoding/json/v2 instead of encoding/json.\n\nReferences to `interface{}` are updated to `any` through.\n\nThe reference to net/rpc/jsonrpc as an example of JSON code is removed,\nas that package doesn\u0027t use v2. I don\u0027t have a good alternative to link\nto.\n\nThe biggest change is the json.Encoder/json.Decoder section. This\nsection previously served three purposes: (1) show how to\nmarshal/unmarshal with an io.Reader/io.Writer, (2) show how to unmarshal\na sequence of distinct JSON objects, and (3) show to mutate a JSON\nobject.\n\n(1) is the most important and I\u0027ve replaced with a short section\ndescribing MarshalWrite/UnmarshalRead.\n\n(2) and (3) are, IMO, much more niche. I could add some jsontext\nexamples, but I\u0027m not convinced these are important enough to include in\nan introductory blog post.\n\nI\u0027ve replaced those with an overview of custom marshalers, as I think\nit\u0027s important to introduce users to how to provide custom marshaling\nwhen the defaults are not sufficient.\n\nFor golang/go#71497.\n\nChange-Id: Ia24de4c6c8f5c5c3501d7cb35968fe2e6a6a6964\nReviewed-on: https://go-review.googlesource.com/c/website/+/813440\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\nLUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Joseph Tsai \u003cjoetsai@digital-static.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7b03282de8b3db6741c39ddd560256115b4168ed",
      "old_mode": 33188,
      "old_path": "_content/blog/json.md",
      "new_id": "4ddad902b73b0a53b07bb5ce13b15823fe05ed36",
      "new_mode": 33188,
      "new_path": "_content/blog/json.md"
    },
    {
      "type": "modify",
      "old_id": "bb3ea566922be7d3bf4c21057d577f628cd8c540",
      "old_mode": 33188,
      "old_path": "_content/doc/index.html",
      "new_id": "7a65f35281c2a3d25b39e975a48ed98bef363d83",
      "new_mode": 33188,
      "new_path": "_content/doc/index.html"
    },
    {
      "type": "modify",
      "old_id": "b807319cede7709e8a442759d12eab100217e918",
      "old_mode": 33188,
      "old_path": "_content/doc/tutorial/index.html",
      "new_id": "027947a261a549e8abb5452b0770ea57d2791878",
      "new_mode": 33188,
      "new_path": "_content/doc/tutorial/index.html"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "36f02b4681c0e9da9fd519b1f9045b9d104dd66d",
      "new_mode": 33188,
      "new_path": "_content/doc/tutorial/json.md"
    }
  ]
}
