该库的主要目的是集成到使用json的测试中,并提供人类可读的测试结果输出。jsondiff可以比较两个json项并返回详细的比较报告。
目前,它可以检测到几种类型的差异:

  • FullMatch -表示项目完全相同。
  • SupersetMatch——表示第一项是第二项的超集。
  • NoMatch -意味着对象是不同的。

    type Options

    ```go type Options struct { Normal Tag Added Tag Removed Tag Changed Tag Skipped Tag SkippedArrayElement func(n int) string SkippedObjectProperty func(n int) string Prefix string Indent string PrintTypes bool ChangedSeparator string // When provided, this function will be used to compare two numbers. By default numbers are compared using their // literal representation byte by byte. CompareNumbers func(a, b json.Number) bool // 不打印匹配的项,默认全打印 SkipMatches bool }

func DefaultConsoleOptions() Options // 在控制台输出 func DefaultHTMLOptions() Options // 输出为HTML func DefaultJSONOptions() Options // 输出为json

  1. <a name="zSsFe"></a>
  2. ### type [Tag](https://github.com/nsf/jsondiff/blob/1e845ec5d249/jsondiff.go#L40)
  3. ```go
  4. type Tag struct {
  5. Begin string
  6. End string
  7. }

Demo

NoMatch

  1. func main() {
  2. a1 := []byte(`{"a": 1, "b": 2, "c": 3}`)
  3. a2 := []byte(`{"a": 1, "c": 3, "d" : 4}`)
  4. opts := jsondiff.DefaultHTMLOptions()
  5. diffV,diffS := jsondiff.Compare(a1,a2,&opts)
  6. fmt.Println(diffV)
  7. fmt.Println(diffS)
  8. }

image.png

SupersetMatch

  1. func main() {
  2. a1 := []byte(`{"a": 1, "b": 2, "c": [1,2,3]}`)
  3. a2 := []byte(`{"a": 1, "b": 2, "c": [1]}`)
  4. opts := jsondiff.DefaultConsoleOptions()
  5. diffV,diffS := jsondiff.Compare(a1,a2,&opts)
  6. fmt.Println(diffV)
  7. fmt.Println(diffS)
  8. }
  9. --------------------------------或--------------------------------
  10. func main() {
  11. a1 := []byte(`{"a": 1, "b": 2, "c": {"c1":1,"c2":2}}`)
  12. a2 := []byte(`{"a": 1, "b": 2, "c": {"c1":1}}`)
  13. opts := jsondiff.DefaultConsoleOptions()
  14. diffV,diffS := jsondiff.Compare(a1,a2,&opts)
  15. fmt.Println(diffV)
  16. fmt.Println(diffS)
  17. }

image.pngimage.png