¶þÊ®²»»ó?£¬¶þÊ®²»»ó½â˵
chanong
|×÷ÕߣºBATµÄÎÚÍаî
ÔÎÄÁ´½Ó£ºhttps://mp.weixin.qq.com/s/VYy1QVeFLRkciymFHueb5w
¼ò½éÔÚ±¾ÎÄÖУ¬ÎÒÃÇÐèÒª¼ÌÐøÌÖÂÛJackson µÄ¡°¸ß¼¶¡±²¿·Ö£ºÊý¾Ý°ó¶¨jackson-databind Ä£¿é¡£Í¨¹ýÉîÈëÁ˽â¸Ã¸ß¼¶API£¬Äú½«¼ÌÐø·¢ÏÖÎÒ»¨Á˺ܶàʱ¼ä½âÊ͵ÄÓмÛÖµµÄϸ½Ú²¿·Ö¡£´åÉÏ´ºÊ÷Ҳ˵¹ý£º¡°ÈËÉúûÓÐÀ˷ѵľÀú¡£¡±
jackson-databind °üº¬Jackson Êý¾Ý´¦ÀíÆ÷µÄ³£¼û¡°Êý¾Ý°ó¶¨º¯Êý¡±ºÍ¡°Ê÷Ä£ÐÍ¡±¡£Ëü¹¹½¨ÔÚStreaming API Ö®ÉÏ£¬²¢Ê¹ÓÃJackson ×¢ÊͽøÐÐÅäÖá£ÕâÊÇJacksonÌṩµÄ¸ß¼¶API£¬ÆäÖØÒªÐÔÊÇÏÔ¶øÒ×¼ûµÄ£¬ÒòΪËüÊÇ¿ª·¢ÈËÔ±×î³£Óõķ½·¨¡£
Jackson ×î³õµÄÓÃÀýÊÇJSON Êý¾Ý°ó¶¨£¬µ«ÏÖÔÚÖ»Òª´æÔÚ½âÎöÆ÷ºÍÉú³ÉÆ÷ʵÏÖ£¬Ëü¾Í¿ÉÒÔÓÃÓÚÆäËûÊý¾Ý¸ñʽ¡£µ«ÊÇ£¬Çë×¢Ò⣬¡°JSON¡±Ò»´ÊÈÔÈ»ÔÚÐí¶àµØ·½£¨ÀýÈçJsonGenerator£©µÄÀàÃû³ÆÖÐʹÓ㬾¡¹ÜËüʵ¼ÊÉϲ¢²»ÑϸñÒÀÀµÓÚJSON ¸ñʽ¡£
Ìáʾ£ºµ×²ãÁ÷APIʹÓÃI/O½øÐÐÊäÈëºÍÊä³ö£¬Òò´ËÀíÂÛÉÏÖ§³ÖÈκθñʽ¡£
°æ±¾ÐÒéJackson °æ±¾£º2.11.0 Spring Framework °æ±¾£º5.2.6.RELEASE Spring Boot °æ±¾£º2.3.0.RELEASE ´Ó±¾ÎÄ¿ªÊ¼Ìí¼ÓеÄÒýµ¼°ü¡£
com.fasterxml.jackson.corejackson-databindÌáʾ£ºjackson-databind Ä£¿é¶Ôjackson-core ºÍjackson-annotations ¾ßÓкÜÇ¿µÄÒÀÀµÐÔ¡£ÄãÖ»ÐèÒªµ¼ÈëÕâ¸ö°ü£¬ÆäËûÁ½¸ö¾Í»á×Ô¶¯°üº¬½øÀ´¡£
ÕâÀïÐèÒª½âÊͼ¸¾ä»°¡£ÎÒÖªµÀºËÐİüÖÐÒ²ÓÐJackson ×¢ÊÍ£¬µ«ÊÇÎÒÃDz»Ó¦¸Ã̸ÂÛËüÂð£¿ÒòΪʵ¼ÊÉÏ£¬Ö»Ì¸ÂÛJackson ×¢ÊÍÊÇûÓÐÒâÒåµÄ¡£±Ï¾¹×¢½âÐèÒª±»Êý¾Ý°ó¶¨Ä£¿é½âÎö£¬ËùÒÔÎÒÃÇÏÈÍê³ÉÕâ¸öÈ»ºóÔÙ»ØÈ¥¡£
ÕýÎľÝÎÒËùÖª£¬ºÜ¶àÅóÓѶÔJacksonµÄÁ˽ⶼÊÇ´ÓObjectMapper¿ªÊ¼ºÍ½áÊøµÄ¡£Òò´Ë£¬×÷ΪÎÒÃǽ«Òª½Ó´¥µÄµÚһƪÎÄÕ£¬ÈÃÎÒÃdz¹µ×Á˽âÕû¸öÊÂÇ飬֨µã¹Ø×¢Ó¦ÓóÌÐò¡£
¹¦Äܼò½éObjectMapper ÊÇjackson-databind Ä£¿éÖÐ×îÖØÒªµÄÀ࣬Íê³ÉÁ˱àÂëÈËÔ±½øÐÐÊý¾Ý°ó¶¨µÄ¡°¼¸ºõËùÓй¦ÄÜ¡±¡£ÕâÊÇΪÓû§ÌṩµÄ¸ß²ãAPI£¬×îµ×²ãÒÀÀµÁ÷ʽAPIÀ´ÊµÏÖ¶Á/д¡£ ObjectMapperÌṩµÄÖ÷Òª¹¦ÄÜÓУº
¡°¸ß¼¶¶¨ÖÆ¡±ÌṩÁ˶ÁдJSON£¨×îÖØÒªµÄ¹¦ÄÜ£©¡¢ÐòÁл¯/·´ÐòÁл¯³£¹æPOJO¡¢¶ÁдJSON Ê÷Ä£ÐÍÒÔ¼°ÀûÓù¦ÄÜÀ´Ê¹Óò»Í¬ÑùʽµÄJSON ÄÚÈݳÉΪ¿ÉÄÜ¡£¿É²åÈëµÄcom.fasterxml.jackson.databind.Module Ä£¿éÀ©Õ¹/·á¸»Á˹¦ÄÜ¡£Ëü»¹Ö§³Ö¡°¸ü¸ß¼¶¡±µÄ¶ÔÏó¸ÅÄÀýÈç¶à̬·ºÐÍ¡¢¶ÔÏóʶ±ð£¬²¢³äµ±¸ü¸ß¼¶£¨ÇÒ¸üÇ¿´ó£©µÄAPI¡£¶ÔÏó¶ÁÈ¡Æ÷ºÍ¶ÔÏóдÈëÆ÷µÄ¡°¹¤³§¡±¡£ ObjectReaderºÍObjectWriterµ×²ãÒ²ÊÇÒÀ¿¿Á÷ʽAPIÀ´ÊµÏÖ¶ÁдµÄ¡£¾¡¹Ü´ó²¿·Ö¶Á/дAPIÊÇͨ¹ýObjectMapper¹«¿ªµÄ£¬µ«Ò»Ð©¹¦Äܺ¯ÊýÈÔÈ»½öλÓÚObjectReader/ObjectWriterÖУ¬ÀýÈ磬¶ÔÓÚ¡°³¤ÐòÁС±¶Á/д¹¦ÄÜ£¬ObjectReader#readValues(InputStream)/ObjectWriter#writeValues(OutputStream) £©¡£ÕâÊÇÉè¼ÆÊ¦¹ÊÒâµÄ¡£ÓÉÓÚÕâÖÖÇé¿öºÜÉÙ¼û£¬Òò´ËÎÞÐèʹÓó£ÓòúÆ·À´Ó¦¶Ô¡£
Êý¾Ý°ó¶¨Êý¾Ý°ó¶¨·ÖΪ¼òµ¥Êý¾Ý°ó¶¨ºÍÍêÕûÊý¾Ý°ó¶¨¡£
¡¶¼òµ¥Êý¾Ý°ó¶¨¡·£ºintÀàÐÍ¡¢List¡¢MapµÈµÄ°ó¶¨.@Testpublicvoidtest1() throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();//¼òµ¥ÀàÐÍÓëMapÀàÐ͵İó¶¨Integerage=objectMapper.readValue('1',int) .class);Mapmap=objectMapper.readValue('{\'name\':\'YourBatman\'}',Map.class);System.out.println(age);System.out.println(map);}ÔËÐгÌÐò²¢´òÓ¡Êä³ö¡£
1{name=YourBatman} ¡°ÍêÕûÊý¾Ý°ó¶¨¡±£º°ó¶¨µ½ÈκÎJava Bean ¶ÔÏó.×¼±¸POJO¡£
@Data@NoArgsConstructor@AllArgsConstructorpublicclassperson{privateStringname;privateIntegerage;} ½«Êý¾Ý°ó¶¨µ½POJO¡£
@Testpublicvoidtest2() throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();personperson=objectMapper.readValue('{\'name\':\'YourBatman\',\'age\':18}',Person.class);System.out¡£ println(person);}ÔËÐгÌÐò²¢´òÓ¡Êä³ö¡£
(name=YourBatman,age=18)ʹÓÃObjectMapper ÔÚÓ¦ÓúͿª·¢ÖУ¬ObjectMapperÊÇÆù½ñΪֹ×î³£Óõģ¬Ò²ÊÇʹÓÃJacksonµÄÇÐÈëµã¡£±¾ÎÄÁгöÁËËüµÄʹÓó¡¾°¡£
Ìáʾ£ºÊ÷Ä£ÐÍÔÚµ¥¶ÀµÄÎĵµÖнéÉÜÒÔ·´Ó³ÆäÖØÒªÐÔ¡£
дÈ루ÐòÁл¯£©ÌṩÁËwriteValue()Õâ×é·½·¨ÓÃÓÚдÈëÊý¾Ý£¨ÈκÎÀàÐͶ¼¿ÉÒÔдÈ룩¡£Õâ¾ÍÊÇÎÒÃdz£ËµµÄ¡°ÐòÁл¯¡±¡£
writeValue(File resultFile, Object value)£ºÐ´ÈëÄ¿±êÎļþwriteValue(OutputStream out, Object value)£ºÐ´ÈëÊä³öÁ÷¡¶String writeValueAsString(Object value)£ºÒÔ×Ö·û´®¸ñʽдÈ룬´Ë·½·¨×î³£Óá· writeValueAsBytes (object value) : дÈë×Ö½ÚÊý×ébyte[]@Testpublicvoidtest3() throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();System.out.println('------------write simple type ----- - ---- ');System.out.println(objectMapper.writeValueAsString(18));System.out.println(objectMapper.writeValueAsString('YourBatman'));System.out.println(' ----- - ---- дÈ뼯ºÏÀàÐÍ----------');System.out.println(objectMapper.writeValueAsString(Arrays.asList(1,2,3)));System.out.println( objectMapper .writeValueAsString(newHashMap(){{put('zhName','A¸ç');put('enName','YourBatman');}}));System.out.println('- ----- ---write POJO----------');System.out.println(objectMapper.writeValueAsString(newperson('A¸ç',18)));}ÔËÐгÌÐò£¬Êä³ö¡£
----------±àдһ¸ö¼òµ¥ÀàÐÍ---------18'YourBatman'------------±àдһ¸ö¼¯ºÏÀàÐÍ-------- -- --- [1,2,3]{'zhName':'A¸ç','enName':'YourBatman'}----------±àдPOJO-------- -- --{'name ':'A¸ç','age':18} Read(·´ÐòÁл¯)ÌṩÁËÒ»×é·½·¨readValue()ÓÃÓÚ¶ÁÈ¡Êý¾Ý£¬Í¨³£¶ÁÈ¡×Ö·û´®ÀàÐÍ¡£Õâ¾ÍÊÇÎÒÃdz£ËµµÄ¡°·´ÐòÁл¯¡±¡£
readValue(String content, Class valueType)£º¶ÁȡΪָ¶¨ÀàÀàÐ͵ĶÔÏó¡£ÕâÊÇ×î³£Óõķ½·¨¡£ readValue(String content, TypeReference valueTypeRef)£ºT±íʾ³£ÓõķºÐÍÀàÐÍ£¬ÀýÈçList¡£Óëcollection/MapÏà·´.Serialized readValue(String content, JavaType valueType): JacksonÄÚÖõÄJavaTypeÀàÐÍ£¬ºóÃæ»áÏêϸ½âÊÍ£¨ºÜÉÙʹÓã© @Testpublicvoidtest4() throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();System. out.println('----- -----¶ÁÈ¡¼òµ¥ÀàÐÍ---------');System.out.println(objectMapper.readValue('18',Integer.class) ) ;//Å׳ö´íÎó£ºJsonParseException µ¥×Ö·û´®£¬½âÎöÅ׳ö´íÎó//System.out.println(objectMapper.readValue('YourBatman',String.class));System.out.println('----- - ----¶ÁÈ¡¼¯ºÏÀàÐÍ-- --------');System.out.println(objectMapper.readValue('[1,2,3]',List .class));System.out . println(objectMapper.readValue('{\ 'zhName\':\'A¸ç\',\'enName\':\'ÄãµÄòùòðÏÀ\'}',Map.class)); System.out.println('- - --------¶ÁÈ¡POJO----------');System.out.println(objectMapper.readValue('{\'name\':\'ÐÖµÜA\',\ 'age\':18}',person.class));}ÔËÐгÌÐò²¢´òÓ¡Êä³ö¡£
----------¶ÁÈ¡¼òµ¥ÀàÐÍ------------18----------¶ÁÈ¡¼¯ºÏÀàÐÍ------------ -[ 1, 2,3]{zhName=A¸ç£¬enName=ÄãµÄòùòðÏÀ}------------ÔĶÁPOJO----------ÈË(ÐÕÃû=A¸ç£¬ÄêÁä=18) ²»Í¬ÔÚÅÅÐòÖУ¬¡°all¡±¿ÉÒÔд³É×Ö·û´®¡£·´ÐòÁл¯³¡¾°¾ßÓÐÌØÊ⹦ÄÜ£¬ÈçʾÀýËùʾ¡£ ¡°ÆÕͨ¡±×Ö·û´®ÎÞ·¨·´ÐòÁл¯¡£
·ºÐÍÏû³ýÎÊÌâ´ÓÎÒÃÇʾÀýÖеÄÈý¸öread ·½·¨¿ÉÒÔ¿´³ö£¬ÎÊÌ⻹ûÓнáÊø£¬¾ÍÏñÕâ¸ö·ºÐ͵ÄÇé¿öÒ»Ñù¡£
@Testpublicvoidtest5() throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();System.out.println('------------¶ÁÈ¡¼¯ºÏÀàÐÍ----------');Listlist=objectMapper. readValue('[1,2,3]',List.class);Longid=list.get(0);System.out.println(id);} µ±ÎÒÔËÐгÌÐòʱ£¬ËüÅ׳öÒ»¸ö´íÎó¡£
----------¶ÁÈ¡¼¯ºÏÀàÐÍ----------java.lang.ClassCastException:java.lang.Integercannotbecasttojava.lang.Longatcn.yourbatman.jackson.core.ObjectMapperDemo.test5(ObjectMapperDemo.java:100 ).Òì³£¶ÑÕ»Ö¸³ö£º Long id=list.get(0); ¸ÃÓï¾äÏÔʾ¡°ÀàÐÍת»»Òì³£¡±¡£Õâ¾ÍÊÇÎÊÌâµÄÔÒò£ºÆÕ±é²Á³ý¡£ÕâÊÇÒ»¸ö²Î¿¼Í¼£¨ºÜÃ÷ÏÔ·ºÐÍÀàÐÍÊÇLong £¬µ«Ëüʵ¼ÊÉ**üº¬Integer ÀàÐÍ£©£º
ÔÚÕâÀàÎÊÌâÖУ¬×îºÃ¡°Ë¼¿¼¡±²¢ÎÊ¡°ÎÒ¿ÉÒÔд[1L£¬2L£¬3L]Â𣿡±¾¡¹ÜÍ·ÄԺܻîÔ¾£¬µ«ÏÖʵÈÔÈ»²Ð¿á£¬Ö´Ðйý³ÌÖÐÒ²»á³öÏÖ´íÎó¡£
com.fasterxml.jackson.core.JsonParseException:Unexpectedcharacter('L'(code76)):wasexpectingcommato SeamlessArrayentriesat[Source:(String)'[1L,2L,3L]';line:1,column:4].ÕâÊÇÒ»¸öµäÐ͵ķºÐÍÕâÊÇÒ»¸öÎÊÌâ²Á³ý¡£´ËÎÊÌâ½ö·¢ÉúÔÚ¶ÁÈ¡£¨·´ÐòÁл¯£©Ê±£¬²»»á·¢ÉúÔÚдÈëʱ¡£ÄÇôÎÒÃǸÃÈçºÎ½â¾öÕâ¸öÎÊÌâÄØ£¿
¡°ÔÚ½â¾öÕâ¸öÎÊÌâ֮ǰ£¬ÎÒÃÇÊ×ÏÈÒªÁ˽âJavaµÄ·ºÐͲÁ³ý£¬ÖÁÉÙÖªµÀÁ½¸ö½áÂÛ¡£¡±
µ±±àÒëJava ʱ£¬¡°Ò»Ð©¡±Í¨ÓÃÐÅÏ¢±»±£ÁôÔÚ×Ö½ÚÂëÖ¸Á֮Íâ¡£·ºÐͽӿڡ¢Àà¡¢·½·¨¶¨ÒåºÍ³ÉÔ±±äÁ¿ÉùÃ÷ÖеÄËùÓзºÐͶ¼ÊÇÀàÐͱ£ÁôµÄ¡£ ¡°ÆäËûµØ·½¡±µÄÐÅÏ¢¡¢Í¨ÓÃÐÅÏ¢½«±»É¾³ý¡£Õâ¸öÎÊÌâÔÚ¿ª·¢¹ý³ÌÖо³£³öÏÖ¡£ÎªÁËÖ§³ÖÕâ¸öÀíÂÛ£¬A¸çÕë¶ÔÕâ¸öÎÊÌâÌṩÁËÁ½ÖÖ½â¾ö·½°¸¹©´ó¼Ò²Î¿¼¡£
½â¾ö·½°¸1£ºÊ¹ÓóÉÔ±±äÁ¿À´±£Áô·ºÐÍÀíÓÉ£º³ÉÔ±±äÁ¿µÄ·ºÐÍÀàÐͲ»»á±»É¾³ý
@Testpublicvoidtest6() throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();System.out.println('------------¶ÁÈ¡¼¯ºÏÀàÐÍ----------');Datadata=objectMapper. readValue('{\'ids\':[1,2,3]}',Data.class);Longid=data.getIds().get(0);System.out.println(id);}@lombok ¡£µ±DataprivatestaticclassData{privateListids;} ÔËÐгÌÐòʱ£¬Ò»Çж¼ºÜºÃ¡£
----------¶ÁÈ¡¼¯ºÏÀàÐÍ----------1 ½â¾ö·½°¸2£ºÊ¹Óùٷ½ÍƼöµÄTypeReference¡£¸Ã¹«Ê½ÒѾ¿¼ÂÇÁËÕâÖÖÒ»°ã²Á³ýÎÊÌâ¡£ TypeReference ʹά»¤·ºÐÍÀàÐͱäµÃ¸ü¼ÓÈÝÒס£Õâ·Ç³£ÓÐÓá£
@Testpublicvoidtest7() throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();System.out.println('------------¶ÁÈ¡¼¯ºÏÀàÐÍ----------');Listids=objectMapper. readValue('[1,2,3]',newTypeReference(){});Longid=ids.get(0);System.out.println(id);}µ±ÎÒÔËÐгÌÐòʱ£¬Ò»Çж¼ºÜºÃ¡£
----------¶ÁÈ¡¼¯ºÏÀàÐÍ----------1 ´Ë½â¾ö·½°¸µÄ»ù±¾ÔÀíÊÇ·ºÐͽӿÚ/ÀàÖеķºÐÍÀàÐͲ»»á±»É¾³ý¡£
¶ÔÓÚ·ºÐͲÁ³ýÇé¿ö£¬½â¾ö·½°¸ÊÇ¡°±£Áô¡±·ºÐÍÀàÐÍ£¬Ê¹ÆäÔÚ·´ÐòÁл¯ÆÚ¼ä²»»á±»ÃɱΡ£³ý·ÇÄãÊÇϹ×Ó£¬·ñÔò½Ü¿ËÑ·±ðÎÞÑ¡Ôñ£¬Ö»ÄÜʹÓá°Í¨ÓÃ/ĬÈÏÀàÐÍ¡±¼ÓÔØ¡£
´Ó2.10°æ±¾¿ªÊ¼£¬JiaFanÌṩÁËJsonMapper£¬ËüÊÇObjectMapperµÄ×ÓÀà¡£Õâ¾ßÓиüÇåÎúµÄÓïÒå£¬ÌØ±ðÓÃÓÚ´¦ÀíJSON ¸ñʽ¡£
ÑϸñÀ´Ëµ£¬ObjectMapper²¢²»¾ÖÏÞÓÚ´¦ÀíJSON¸ñʽ£»ÀýÈçÏÂÃæ½éÉܵÄÁíÒ»¸ö×ÓÀàYAMLMapper£¬ÓÃÓÚÖ§³ÖYaml¸ñʽ£¨ÐèÒª¶îÍâµÄµ¼Èë°ü£¬¼ûÏÂÎÄ~£©
ÁíÍ⣬ÓÉÓÚ¹¹½¨ObjectMapperʵÀýÊÇÒ»¸ö¸ßƵ²Ù×÷£¬JacksonҲ˳Ӧ³±Á÷£¬ÌṩÁËMapperBuilder¹¹½¨Æ÷£¨2.10¼°¸ü¸ß°æ±¾£©¡£Í¨¹ýÕâ¸ö½á¹¹Ì壬Äã¿ÉÒÔºÜÈÝÒ׵ػñµÃÒ»¸öObjectMapper£¨ÀýÈçJsonMapper£©ÊµÀý¡£
@Testpublicvoidtest8() throwsJsonProcessingException{JsonMapperjsonMapper=JsonMapper.builder().configure(JsonReadFeature.ALLOW_SINGLE_QUOTES,true).build();personperson=jsonMapper.readValue('{'name':'YourBatman','age':18}', Person.class);System.out.println(person);} ÔËÐгÌÐò£¨Õý³£Êä³ö£©¡£
person(name=YourBatman,age=18) ·Ç³£¼òÒªµØ×ܽáÁ˱¾ÎĵÄÄÚÈÝ£¬²¢ÃèÊöÁËObjectMapper µÄÈÕ³£Ê¹Óá¢Ê¹ÓÃËü½øÐжÁ/дÒÔ¼°Ö´ÐÐÈÕ³£¹¦ÄÜ¡£Masu¡£
д×÷±È½Ï¼òµ¥¡£È«ÊÀ½ç¶¼Á÷ÐÐÒ»ÖÖwriteValueAsString(obj) ·½·¨£¬µ«ÊǶÔÓÚ¶ÁÈ¡À´Ëµ£¬³ýÁËʹÓÃreadValue(String content, Class valueType) ×Ô¶¯Íê³ÉÊý¾Ý°ó¶¨Ö®Í⣬»¹ÐèÒªÌØ±ð×¢Òâ¡£·ºÐͲÁ³ýÎÊÌ⣺¡°µ±·´ÐòÁл¯Îª¼¯ºÏÀàÐÍ£¨Collection »òMap£©Ê±£¬·ºÐÍÀàÐͻᱻ²Á³ý¡£´ËʱÄúÓ¦¸ÃʹÓÃreadValue(String content, TypeReference valueTypeRef) ·½·¨¡£¡±
Ìáʾ£ºÈç¹ûÄúÔÚÏîÄ¿Öз¢ÏÖÀàËÆobjectMapper.readValue(xxx, List.class) µÄ´úÂ룬Ôò¿ÉÄÜ´æÔÚ°²È«·çÏÕ£¨µ«²¢²»Ò»¶¨Òâζׯᱨ¸æ´íÎ󣩡£








