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 }