github.com/bytedance/sonic@v1.11.7-0.20240517092252-d2edb31b167b/issue_test/issue465_test.go (about)

     1  /**
     2  * Copyright 2023 ByteDance Inc.
     3  *
     4  * Licensed under the Apache License, Version 2.0 (the "License");
     5  * you may not use this file except in compliance with the License.
     6  * You may obtain a copy of the License at
     7  *
     8  *     http://www.apache.org/licenses/LICENSE-2.0
     9  *
    10  * Unless required by applicable law or agreed to in writing, software
    11  * distributed under the License is distributed on an "AS IS" BASIS,
    12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  * See the License for the specific language governing permissions and
    14  * limitations under the License.
    15   */
    16  
    17  package issue_test
    18  
    19  import (
    20      `bytes`
    21      `encoding/json`
    22      `testing`
    23  
    24      `github.com/bytedance/sonic`
    25      `github.com/stretchr/testify/require`
    26  )
    27  
    28  func TestIssue465(t *testing.T) {
    29      data := `
    30  {
    31      "data": {
    32      "1": "",
    33      "2": true,
    34      "3": "",
    35      "4": "",
    36      "5": {
    37          "a": {},
    38          "b": "hello",
    39          "c": ""
    40      },
    41      "6": "",
    42      "7": false,
    43      "8": true,
    44      "9": 7,
    45      "10": "",
    46      "11": {},
    47      "12": 0,
    48      "13": {},
    49      "14": "",
    50      "15": "",
    51      "16": true,
    52      "17": {"d":{"e":1}}
    53      }
    54  }`
    55      root, _ := sonic.GetFromString(data)
    56      sp := root.GetByPath("data", "5")
    57      node := sp.Get("a")
    58      require.True(t, node.Exists())
    59      root.GetByPath("data", "17")
    60      node2 := sp.Get("b")
    61      get2, err2 := node2.String()
    62      require.Nil(t, err2)
    63      require.Equal(t, get2, "hello")
    64      b, err := root.MarshalJSON()
    65      require.NoError(t, err)
    66      buf := bytes.NewBuffer(nil)
    67      json.Compact(buf, b)
    68      require.Equal(t, buf.String(), string(b))
    69  }