You've already forked json-iterator
							
							
				mirror of
				https://github.com/json-iterator/go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	#129 fix read map with reader, should use ReadMapCB instead of ReadObjectCB
This commit is contained in:
		| @@ -89,7 +89,7 @@ func (any *objectLazyAny) Get(path ...interface{}) Any { | ||||
| 			mappedAll := map[string]Any{} | ||||
| 			iter := any.cfg.BorrowIterator(any.buf) | ||||
| 			defer any.cfg.ReturnIterator(iter) | ||||
| 			iter.ReadObjectCB(func(iter *Iterator, field string) bool { | ||||
| 			iter.ReadMapCB(func(iter *Iterator, field string) bool { | ||||
| 				mapped := locatePath(iter, path[1:]) | ||||
| 				if mapped.ValueType() != Invalid { | ||||
| 					mappedAll[field] = mapped | ||||
| @@ -108,7 +108,7 @@ func (any *objectLazyAny) Keys() []string { | ||||
| 	keys := []string{} | ||||
| 	iter := any.cfg.BorrowIterator(any.buf) | ||||
| 	defer any.cfg.ReturnIterator(iter) | ||||
| 	iter.ReadObjectCB(func(iter *Iterator, field string) bool { | ||||
| 	iter.ReadMapCB(func(iter *Iterator, field string) bool { | ||||
| 		iter.Skip() | ||||
| 		keys = append(keys, field) | ||||
| 		return true | ||||
|   | ||||
| @@ -288,7 +288,7 @@ func (iter *Iterator) Read() interface{} { | ||||
| 		return arr | ||||
| 	case Object: | ||||
| 		obj := map[string]interface{}{} | ||||
| 		iter.ReadObjectCB(func(Iter *Iterator, field string) bool { | ||||
| 		iter.ReadMapCB(func(Iter *Iterator, field string) bool { | ||||
| 			obj[field] = iter.Read() | ||||
| 			return true | ||||
| 		}) | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| func Test_read_map(t *testing.T) { | ||||
| @@ -143,5 +144,17 @@ func Test_encode_map_uint_keys(t *testing.T) { | ||||
| 	output, err := ConfigCompatibleWithStandardLibrary.MarshalToString(m) | ||||
| 	should.Nil(err) | ||||
| 	should.Equal(string(bytes), output) | ||||
|  | ||||
| } | ||||
|  | ||||
| func Test_read_map_with_reader(t *testing.T) { | ||||
| 	should := require.New(t) | ||||
| 	input := `{"branch":"beta","change_log":"add the rows{10}","channel":"fros","create_time":"2017-06-13 16:39:08","firmware_list":"","md5":"80dee2bf7305bcf179582088e29fd7b9","note":{"CoreServices":{"md5":"d26975c0a8c7369f70ed699f2855cc2e","package_name":"CoreServices","version_code":"76","version_name":"1.0.76"},"FrDaemon":{"md5":"6b1f0626673200bc2157422cd2103f5d","package_name":"FrDaemon","version_code":"390","version_name":"1.0.390"},"FrGallery":{"md5":"90d767f0f31bcd3c1d27281ec979ba65","package_name":"FrGallery","version_code":"349","version_name":"1.0.349"},"FrLocal":{"md5":"f15a215b2c070a80a01f07bde4f219eb","package_name":"FrLocal","version_code":"791","version_name":"1.0.791"}},"pack_region_urls":{"CN":"https://s3.cn-north-1.amazonaws.com.cn/xxx-os/ttt_xxx_android_1.5.3.344.393.zip","default":"http://192.168.8.78/ttt_xxx_android_1.5.3.344.393.zip","local":"http://192.168.8.78/ttt_xxx_android_1.5.3.344.393.zip"},"pack_version":"1.5.3.344.393","pack_version_code":393,"region":"all","release_flag":0,"revision":62,"size":38966875,"status":3}` | ||||
| 	reader := strings.NewReader(input) | ||||
| 	decoder := ConfigCompatibleWithStandardLibrary.NewDecoder(reader) | ||||
| 	m1 := map[string]interface{}{} | ||||
| 	should.Nil(decoder.Decode(&m1)) | ||||
| 	m2 := map[string]interface{}{} | ||||
| 	should.Nil(json.Unmarshal([]byte(input), &m2)) | ||||
| 	should.Equal(m2, m1) | ||||
| 	should.Equal("1.0.76", m1["note"].(map[string]interface{})["CoreServices"].(map[string]interface{})["version_name"]) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user