package com.jsoniter; import com.jsoniter.annotation.JsonProperty; import com.jsoniter.annotation.JsonWrapper; import com.jsoniter.annotation.JsoniterAnnotationSupport; import com.jsoniter.any.Any; import com.jsoniter.fuzzy.MaybeEmptyArrayDecoder; import com.jsoniter.fuzzy.MaybeStringLongDecoder; import com.jsoniter.output.EncodingMode; import com.jsoniter.output.JsonStream; import com.jsoniter.spi.Decoder; import com.jsoniter.spi.EmptyExtension; import com.jsoniter.spi.JsoniterSpi; import com.jsoniter.spi.TypeLiteral; import junit.framework.TestCase; import java.io.IOException; import java.lang.reflect.Type; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public class TestDemo extends TestCase { public void test_bind_api() throws IOException { JsonIterator iter = JsonIterator.parse("[0,1,2,3]"); int[] val = iter.read(int[].class); System.out.println(val[3]); } public void test_any_api() throws IOException { JsonIterator iter = JsonIterator.parse("[0,1,2,3]"); System.out.println(iter.readAny().toInt(3)); } public void test_iterator_api() throws IOException { JsonIterator iter = JsonIterator.parse("[0,1,2,3]"); int total = 0; while (iter.readArray()) { total += iter.readInt(); } System.out.println(total); } public static class ABC { public Any a; } public void test_abc() throws IOException { JsonIterator iter = JsonIterator.parse("{'a': {'b': {'c': 'd'}}}".replace('\'', '"')); ABC abc = iter.read(ABC.class); assertEquals("d", abc.a.get("b", "c").object()); } public void test_iterator_api_and_bind() throws IOException { JsonIterator iter = JsonIterator.parse("[123, {'name': 'taowen', 'tags': ['crazy', 'hacker']}]".replace('\'', '"')); iter.readArray(); int userId = iter.readInt(); iter.readArray(); User user = iter.read(User.class); user.userId = userId; iter.readArray(); // end of array System.out.println(user); } public void test_empty_array_as_null() throws IOException { JsoniterSpi.registerExtension(new EmptyExtension() { @Override public Decoder createDecoder(final String cacheKey, final Type type) { if (cacheKey.endsWith(".original")) { // avoid infinite loop return null; } if (type != Date.class) { return null; } return new Decoder() { @Override public Object decode(JsonIterator iter1) throws IOException { if (iter1.whatIsNext() == ValueType.ARRAY) { if (iter1.readArray()) { // none empty array throw iter1.reportError("decode [] as null", "only empty array is expected"); } else { return null; } } else { // just use original decoder TypeLiteral typeLiteral = new TypeLiteral(type, cacheKey + ".original", TypeLiteral.create(type).getDecoderCacheKey()); return iter1.read(typeLiteral); } } }; } }); JsonIterator iter = JsonIterator.parse("[]"); assertNull(iter.read(Date.class)); } public static class Order { @JsonProperty(decoder = MaybeStringLongDecoder.class) public long order_id; @JsonProperty(decoder = MaybeEmptyArrayDecoder.class) public OrderDetails order_details; } public static class OrderDetails { public String pay_type; } public void test_iterator() throws IOException { JsonIterator iter = JsonIterator.parse("{'numbers': ['1', '2', ['3', '4']]}".replace('\'', '"')); assertEquals("numbers", iter.readObject()); assertTrue(iter.readArray()); assertEquals("1", iter.readString()); assertTrue(iter.readArray()); assertEquals("2", iter.readString()); assertTrue(iter.readArray()); assertEquals(ValueType.ARRAY, iter.whatIsNext()); assertTrue(iter.readArray()); // start inner array assertEquals(ValueType.STRING, iter.whatIsNext()); assertEquals("3", iter.readString()); assertTrue(iter.readArray()); assertEquals("4", iter.readString()); assertFalse(iter.readArray()); // end inner array assertFalse(iter.readArray()); // end outer array assertNull(iter.readObject()); // end object } public void test_any_is_fun() throws IOException { Any any = JsonIterator.deserialize("{'numbers': ['1', '2', ['3', '4']]}".replace('\'', '"')); any.get("numbers").asList().add(Any.wrap("hello")); assertEquals("{'numbers':['1', '2', ['3', '4'],'hello']}".replace('\'', '"'), JsonStream.serialize(any)); any = JsonIterator.deserialize("{'error': 'failed'}".replace('\'', '"')); assertFalse(any.toBoolean("success")); any = JsonIterator.deserialize("{'success': true}".replace('\'', '"')); assertTrue(any.toBoolean("success")); any = JsonIterator.deserialize("{'success': 'false'}".replace('\'', '"')); assertFalse(any.toBoolean("success")); any = JsonIterator.deserialize("[{'score':100}, {'score':102}]".replace('\'', '"')); assertEquals("[100,102]", JsonStream.serialize(any.get('*', "score"))); any = JsonIterator.deserialize("[{'score':100}, {'score':[102]}]".replace('\'', '"')); assertEquals("[{},{'score':102}]".replace('\'', '"'), JsonStream.serialize(any.get('*', '*', 0))); any = JsonIterator.deserialize("[{'score':100}, {'score':102}]".replace('\'', '"')); assertEquals(Long.class, any.get(0, "score").object().getClass()); any = JsonIterator.deserialize("[{'score':100}, {'score':102}]".replace('\'', '"')); assertEquals(ValueType.INVALID, any.get(0, "score", "number").valueType()); any = JsonIterator.deserialize("[{'score':100}, {'score':102}]".replace('\'', '"')); for (Any record : any) { Any.EntryIterator entries = record.entries(); while (entries.next()) { System.out.println(entries.key()); System.out.println(entries.value()); } } } public static class TestObject { public String body; public int commentCount; } public void test_utf8() { String input = "{\"body\":\"یبل تیبلتیبمسش یبمک سشیمب سشیکمب تشسکمیبنمسیتبمسشتیب منشستمتبیملتیبملتیبمتلیمبلت یبلتیبل ینبنن اسی باسیش نباسشینباشسینبشسنتیب شسنیاب نشسیابنسشتیابنتسشیابنسشیابنسیشابنسشیاب نسشیاب سشیب سشیبن ت سینبسیبنسیشاب نسیاب سیاب نسیتبا سینا سیا بسیاب نستیشاب نستیبسی\",\"commentCount\":0,\"doILike\":false,\"doISuggest\":false,\"likeCount\":1,\"rowId\":\"58bf6ed1c8015f0bd4422c70\",\"specialLabel\":0,\"submitDate\":\"2017-03-08T02:39:13.568Z\",\"suggestCount\":0,\"title\":\"تست می باشد.\",\"type\":1,\"url\":[\"images/cell/490661220.jpg\"],\"username\":\"mahdihp\"}"; TestObject obj = JsonIterator.deserialize(input, TestObject.class); assertEquals(0, obj.commentCount); } public void test_deserialize() { String str = "{\"port\":13110} "; JsonIterator.deserialize(str.getBytes(), HashMap.class); } }