Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
²ÉÓÃGson½âÎöº¬ÓжàÖÖJsonObjectµÄ¸´ÔÓjson
 
À´Ô´£ºjianshu ·¢²¼ÓÚ£º2017-7-6
  3193  次浏览      27
 

ǰ×à

ʹÓà Gson £¨https://github.com/google/gson£©È¥½âÎö json Ó¦¸ÃÊǺܳ£¼ûµÄ£¬´ó²¿·ÖµÄÇé¿öÏÂÎÒÃÇÖ»Òª´´½¨Ò»¸ö Gson ¶ÔÏó£¬È»ºó¸ù¾Ý json ºÍ¶ÔÓ¦µÄ Java ÀàÈ¥½âÎö¾Í¿ÉÒÔÁË¡£

µ«ÊǶÔÓڱȽϸ´Ô json£¬±ÈÈçÏÂÃæÕâÖÖ£¬ attributes ¶ÔÓ¦µÄ jsonObject ÖеÄ×Ö¶ÎÊÇÍêÈ«²»Ò»ÑùµÄ£¬Õâ¸öʱºòÔÙ¼òµ¥µÄÓÃÉÏÃæµÄ·½·¨¾Í½âÎö²»ÁËÁË¡£

µ±È»ÁË£¬ÎÒÃÇ˵һ²½µ½Î»µÄ·½Ê½½â¾ö²»ÁË£¬µ«ÓÃÒ»µã±¿·½·¨»¹ÊÇ¿ÉÒԵġ£±ÈÈçÏÈÊÖ¶¯½âÎöÄõ½ attributes ¶ÔÓ¦µÄ jsonObject£¬¸ù¾ÝÓëËüͬ¼¶ type ¶ÔÓ¦µÄ value ¾Í¿ÉÒÔÅжÏÕâÒ»¶Î jsonObject ¶ÔÓ¦µÄ Java ÀàÊÇÄĸö£¬×îºó¾Í²ÉÓà gson.from() ·½·¨½âÎö³ö attributes ¶ÔÓ¦µÄ

ËäÈ»ÕâÑùÄÜʵÏÖÕû¸ö json µÄ·´ÐòÁл¯£¬µ«ÊÇÕâÖÖ·½Ê½±È½ÏÂé·³£¬¶øÇÒÒ»µãÒ²²»ÓÅÑÅ£¬Èç¹ûÏîÄ¿ÖдæÔںܶàÕâÑùµÄÇé¿ö£¬¾Í»á×öºÜ¶àÖØ¸´µÄÌåÁ¦ÀͶ¯¡£

ÈçºÎ¸üÓÅÑÅ¡¢¸üͨÓõĽâ¾öÕâÀàÎÊÌ⣬ÔÚÍøÉÏûÓÐÕÒµ½´ð°¸£¬Ö»ºÃÈ¥ÉîÈëÑо¿Ò»ÏÂGsonÁË¡£´ø×ÅÕâÑùµÄÄ¿µÄ£¬·­¿´ÁËGsonµÄÎĵµ£¨https://github.com/google/gson/blob/master/UserGuide.md£©£¬·¢ÏÖÁËÒ»¾ä»°

Õâ¾ä»°Ëµ Gson ¿ÉÒÔ´¦ÀíÈÎÒâµÄ Java ¶ÔÏó¡£ÄÇô¶ÔÓÚÉÏÃæ½²µÄÄÇÖÖ·´ÐòÁл¯Çé¿öÀ´½²£¬ Gson Ó¦¸ÃÒ²ÄÜ×öµ½¡£Í¨¹ýÑо¿ Gson µÄÎĵµ£¬·¢ÏÖ¿ÉÒÔͨ¹ý×Ô¶¨ÒåJsonDeserializerµÄ·½Ê½À´ÊµÏÖ½âÎöÕâÖÖ jsonObject ÀàÐͲ»Í¬µÄÇé¿ö¡£

ÎÒÃÇÖªµÀ£¬´ó²¿·ÖÇé¿öÏ Gson ÊÇͨ¹ýÖ±½Ó new ³öÀ´µÄ·½Ê½À´´´½¨£¬²»¹ýÒ²¿ÉÒÔ²ÉÓà GsonBuilder Õâ¸öÀàÈ¥Éú³É Gson¡£

GsonBuilder ͨ¹ý registerTypeAdapter()·½·¨£¬¶ÔÄ¿±êÀà½øÐÐ×¢²á¡£µ±ÐòÁл¯»òÕß·´ÐòÁл¯Ä¿±êÀàµÄʱºò¾Í»áµ÷ÓÃÎÒÃÇ×¢²áµÄtypeAdapter£¬ ÕâÑù¾ÍʵÏÖÁËÈ˹¤¸ÉÔ¤ Gson µÄÐòÁл¯ºÍ·´ÐòÁл¯¹ý³Ì¡£

GsonBuilder µÄ registerTypeAdapte() ·½·¨µÄµÚ¶þ¸ö²ÎÊýÊÇ Object ÀàÐÍ£¬Ò²¾ÍÒâζ×ÅÎÒÃÇ¿ÉÒÔ×¢²á¶àÖÖÀàÐ굀 typeAdapter£¬Ä¿Ç°Ö§³ÖµÄÀàÐÍÓÐ JsonSerializer¡¢JsonDeserializer¡¢InstanceCreator¡¢TypeAdapter¡£

¾­¹ýÒ»·¬µ·¹Ä£¬Ð´ÁËÒ»¸ö¹¤¾ßÀ࣬¶ÔÓÚÉÏÃæµÄÄǸö¸´ÔÓ json£¬ÓÃÁ˲»µ½10ÐдúÂë¾Í¸ã¶¨£¬¶øÇұȽÏÓÅÑźÍͨÓá£

±¾Îľͼòµ¥·ÖÎöÒ»ÏÂÈçºÎͨ¹ý×Ô¶¨Òå JsonDeserializer À´ÊµÏÖÒ»¸öͨÓõŤ¾ßÀàÓÃÓÚ½âÎö¸´ÔÓÀàÐÍ json¡£¶ÔÓÚÒÔºóÅöµ½ÏàËÆÎÊÌ⣬ÕâÖÖ´¦Àí·½·¨¿ÉÒÔÌṩһÖÖ½â¾öÎÊÌâµÄ˼·¡£¾ßÌåµÄ´úÂëºÍʵÀý£¬¿ÉÒԲ鿴ÏîÄ¿£¨https://github.com/sososeen09/MultiTypeJsonParser£©¡£Èç¹û¶ÔÄúµÄ˼·ÓÐһЩÆô·¢£¬»¶Ó­½»Á÷ºÍStar¡£

JsonDeserializer½éÉÜ

JsonDeserializer ÊÇÒ»¸ö½Ó¿Ú£¬Ê¹ÓõÄʱºòÐèҪʵÏÖÕâ¸ö½Ó¿Ú²¢ÔÚ GsonBuilder ÖжԾßÌåµÄÀàÐÍÈ¥×¢²á¡£µ±·´ÐòÁл¯µ½¶ÔÓ¦µÄÀàµÄʱºò¾Í»áµ÷ÓÃÕâ¸ö×Ô¶¨Òå JsonDeserializer µÄ deserialize() ·½·¨¡£ÏÂÃæ¶ÔÕâ¸ö·½·¨µÄ¼¸¸ö²ÎÊý×öһϽâÊÍ£¬ÒÔ±ãÓÚ¸üºÃµÄÀí½âGson½âÎöµÄ¹ý³Ì¡£

JsonElement

JsonElement´ú±í ÔÚ Gson ÖеĴú±íÒ»¸öÔªËØ¡£ËüÊÇÒ»¸ö³éÏóÀ࣬ÓÐ4¸ö×ÓÀࣺJsonObject¡¢JsonArray¡¢JsonPrimitive¡¢JsonNull¡£

¢ñ.JsonObject ±íʾµÄÊǰüº¬name-valueÐ굀 json ×Ö·û´®£¬ÆäÖÐ name ÊÇ×Ö·û´®£¬¶ø value ¿ÉÒÔÊÇÆäËüÀàÐ굀 JsonElement ÔªËØ¡£ÔÚjsonÖÐÓà ¡°{}¡± °ü¹üÆðÀ´µÄÒ»¸öÕûÌå¾ÍÊÇJsonObject¡£ÀýÈç

¢ò.JsonArray Õâ¸öÀàÔÚ Gson Öдú±íÒ»¸öÊý×éÀàÐÍ£¬Ò»¸öÊý×é¾ÍÊÇJsonElementµÄ¼¯ºÏ£¬Õâ¸ö¼¯ºÏÖÐÿһ¸öÀàÐͶ¼¿ÉÄܲ»Í¬¡£ÕâÊÇÒ»¸öÓÐÐòµÄ¼¯ºÏ£¬Òâζ×ÅÔªËØµÄÌí¼Ó˳ÐòÊDZ»Î¬³Ö×ŵġ£ÉÏÃæÀý×ÓÖÐlist¶ÔÓ¦µÄ ¡°[]¡± °ü¹üÆðÀ´µÄjson¾ÍÊÇJsonArray¡£

¢ó.JsonPrimitive Õâ¸ö¿ÉÒÔÈÏΪÊÇjsonÖеÄԭʼÀàÐ͵ÄÖµ£¬°üº¬JavaµÄ8¸ö»ù±¾ÀàÐͺÍËüÃǶÔÓ¦µÄ°ü×°ÀàÐÍ£¬Ò²°üº¬ String ÀàÐÍ¡£±ÈÈçÉÏÃæ "first-name" ¶ÔÓ¦µÄ "Su" ¾ÍÊÇÒ»¸ö String ÀàÐ굀 JsonPrimitive ¡£

¢ô.JsonNull ͨ¹ýÃû×ÖÒ²¿ÉÒԲµ½£¬Õâ¸ö´ú±íµÄÊÇ null Öµ¡£

Type

TypeÊÇJavaÖеÄËùÓÐÀàÐ͵Ķ¥²ã½Ó¿Ú£¬ËüµÄ×ÓÀàÓÐ GenericArrayType¡¢ParameterizedType¡¢TypeVariable¡¢WildcardType£¬Õâ¸ö¶¼ÊÇÔÚjava.lang.reflect°üÏÂÃæµÄÀà¡£ÁíÍ⣬ÎÒÃÇ×îÊìϤµÄÒ»¸öÀà Class ҲʵÏÖÁË Type ½Ó¿Ú¡£

Ò»°ãÀ´½²£¬µ÷Óà GsonBuilder µÄ registerTypeAdapter() È¥×¢²á£¬µÚÒ»¸ö²ÎÊýʹÓà Class ÀàÐ;ͿÉÒÔÁË¡£

JsonDeserializationContext

Õâ¸öÀàÊÇÔÚ·´ÐòÁйý³ÌÖУ¬ÓÉÆäËüÀàµ÷ÓÃÎÒÃÇ×Ô¶¨ÒåµÄ JsonDeserialization µÄ deserialize() ·½·¨Ê±´«µÝ¹ýÀ´µÄ£¬ÔÚ Gson ÖÐËüΨһµÄÒ»¸öʵÏÖÊÇTreeTypeAdapter ÖеÄÒ»¸ö˽ÓеÄÄÚ²¿Àà GsonContextImpl ¡£¿ÉÒÔÔÚ×Ô¶¨ÒåµÄ JsonDeserializer µÄ deserialize() ÖÐÈ¥µ÷Óà JsonDeserializationContext µÄ deserialize() ·½·¨È¥»ñµÃÒ»¸ö¶ÔÏó¡£

µ«ÊÇÒª¼Çס£¬Èç¹û´«µÝµ½ JsonDeserializationContext ÖÐµÄ json Óë JsonDeserializer ÖÐµÄ json Ò»ÑùµÄ»°£¬¿ÉÄܻᵼÖÂËÀÑ­»·µ÷Óá£

˼··ÖÎö

´´½¨JavaBean

»¹ÊÇÒÔ×îÉÏÃæµÄÄǸö json ½øÐзÖÎö£¬ÔÚ list ¶ÔÓ¦ JsonArray £¬ÆäÖеÄÁ½¸ö JsonObject ÖУ¬attributes ¶ÔÓ¦µÄ JsonObject ×Ö¶ÎÍêÈ«²»Ò»Ñù£¬µ«ÊÇΪÁËͳһ£¬ÔÚд JavaBean µÄʱºò¿ÉÒÔ¸øËüÃÇÉèÖÃÒ»¸ö¹²Í¬µÄ¸¸À࣬¾¡¹ÜËüÊǿյġ£

ÉèÖà Attribute Õâ¸ö SuperClass Ö»ÊÇΪÁËÔÚ GsonBuilder È¥×¢²á£¬µ±¾ßÌå½âÎöµÄʱºòÎÒÃÇ»á¸ù¾Ý

type ¶ÔÓ¦µÄÀàÐÍÈ¥ÕÒµ½¶ÔÓ¦µÄClass¡£

µ½ÁËÕâÀïÎÒÃǾÍÓ¦¸ÃÏëµ½£¬type ¶ÔÓ¦µÄ value ¿Ï¶¨ÊÇÒªÓë¾ßÌåµÄ JavaBean ¶ÔÓ¦ÆðÀ´µÄ¡£±ÈÈçÔÚÕâÀï¾ÍÊÇ

Èç¹û type ÊÇ "address" £¬ÄÇôÎÒÃǾͿÉÒÔÓà gson È¥Äà AddressAttribute.class ºÍ¶ÔÓ¦µÄ json È¥½âÎö¡£

ÈçºÎ°Ñ json ׼ȷµÄתΪ¶ÔÓ¦µÄ JavaBean

ÎÒÃÇ×¢²áµÄÊǸ¸Àà Attribute £¬µ±·´ÐòÁл¯ÐèÒª½âÎö Attribute µÄʱºò¾Í»á°Ñ¶ÔÓ¦µÄ json ×÷Ϊ²ÎÊý»Øµ÷×Ô¶¨ÒåµÄ JsonDeserializer ¡£ÎÒÃǾͿÉÒÔÔÚÏÂÃæÕâ¸ö·½·¨ÖÐд×Ô¼ºµÄÂß¼­µÃµ½ÎÒÃÇÐèÒªµÄ Attribute ¶ÔÏóÁË¡£

µ«ÊÇϸÐĵÄÅóÓÑÓ¦¸Ã»á·¢ÏÖÁË£¬Õâ¸öʱºò´«µÝµÄ json ÓпÉÄÜÊÇÕâÑùµÄ

Ò²ÓпÉÄÜÊÇÕâÑùµÄ

ÎÒÃÇÔõô֪µÀ¸Ã½âÎö³É AddressAttribute »¹ÊÇ NameAttribute £¿£¿£¿

ÎÒÃÇÏëÏ룬¾ßÌå½âÎö³ÉÄĸö£¬ÎÒÃǿ϶¨ÊÇÐèÒªÖªµÀ type ¶ÔÓ¦µÄ value ¡£¶øÕâ¸ö type ÊÇÓë attributes ͬ¼¶µÄ×ֶΣ¬ÕÕןղÅÕâÑù¿Ï¶¨ÊÇûϣÍûÄõ½Õâ¸ö value µÄ¡£

ÎÒÃÇÔÙÏëÏ룬Äܹ»ÖªµÀÕâ¸ö type ¶ÔÓ¦µÄ value ÊÇʲôµÄ¿Ï¶¨ÊÇ attributes ÉÏÒ»²ã¼¶µÄ json ¡£

ÄÇôÎÒÃǿɲ»¿ÉÒÔÔÚ GsonBuilder ÖÐÔÙÈ¥×¢²áÒ»¸ö typeAdapter À´½âÎöÕâ¸öÍâ²ãµÄ json ÄØ£¿µ±È»¿ÉÒÔ¡£

Õâ¸ö AttributeWithType ¾ÍÊÇÍâ²ãµÄ json ¶ÔÓ¦µÄ JavaBean

ÔÚ·´ÐòÁл¯ AttributeWithType Õâ¸öÀàµÄʱºò£¬ÎÒÃÇ¿ÉÒÔ»ñµÃÕâ¸ö type ¶ÔÓ¦µÄ value£¬È»ºó°ÑÕâ¸ö value ´«µÝ¸øÀï²ãµÄ Attribute ¶ÔÓ¦µÄ JsonDeserializer¡£ÕâÑù¾Í¿ÉÒÔ¸ù¾Ý value ÊÇ ¡°address¡± »òÕß ¡°name¡± È¥¶Ô AddresAttribute »òÕß NameAttribute ½øÐз´ÐòÁл¯ÁË¡£

ÓÐÒ»¸ö¿Ó

Ç°ÃæÄÇÎÒÃǽ²¹ý£¬µ÷Óà JsonDeserializationContext µÄ·½·¨Ó¦¸Ã×¢ÒâËÀÑ­»·¡£ÔÚ¾ßÌåµÄʵ¼ùÖУ¬ÎÒËäȻûÓе÷Óà JsonDeserializationContext µÄ·½·¨£¬µ«ÊÇÒÀÈ»³öÏÖÁËËÀÑ­»·µÄÇé¿ö¡£¾ÍÊÇÒòΪÎÒÊÇÕâôÓõġ£

Õ§Ò»¿´Ã»Ê²Ã´ÎÊÌâ°¡£¬ÎÊÌâ¾Í³öÔÚÕâ¸ö gson ÉíÉÏ¡£Õâ¸ö gson ÊÇÒѾ­×¢²á¹ý½âÎö AttributeWithType µÄ GsonBuilder ´´½¨µÄ¡£ gson.fromJson() ·½·¨ÖÐµÄ json ÊÇ AttributeWithType ¶ÔÓ¦µÄ·´ÐòÁл¯µÄ json£¬gson.fromJson() ÄÚ²¿»áÔٴε÷Óà AttributeWithType ¶ÔÓ¦µÄ JsonDeserializer ÖÐµÄ deserialize() ·½·¨£¬´Ó¶øµ¼ÖÂËÀÑ­»·¡£

±ÜÃâËÀÑ­»·µÄ·½Ê½¾ÍÊÇÓÃGsonBuilderн¨Ò»¸ö gson £¬Õâ¸öGsonBuilder²»ÔÙ×¢²á AttributeWithType £¬¶øÖ»È¥×¢²á Attribute È¥½âÎö¡£

ΪÁ˸üºÃ¸üͨÓÃ

¢ñ.ÔÚÏîÄ¿ÖУ¬¿ÉÄÜ»¹»á´æÔÚÁíÒ»ÖÖ¸ñʽµÄjson£¬ÍⲿûÓе¥¶ÀµÄtypeÔªËØ£¬¶øÊÇÓëÆäËüµÄÔªËØ·ÅÔÚͬһ¸öJsonObjectÖС£ÕâÑùµÄ¸ñʽ¸üʡʣ¬²»ÐèҪע²áÍâ²ãµÄtypeAdaper¼´¿É¡£

¢ò.Èç¹ûÔÚ½âÎö¹ý³ÌÖз¢ÏÖÓÐЩÀàÐÍûÓÐ×¢²áµ½ MultiTypeJsonParser µÄ Builder ÖУ¬½âÎöµÄʱºòÅöµ½ÏàÓ¦µÄ jsonObject ¾ÍÖ±½Ó·µ»Ønull¡£±ÈÈçÏÂÃæÕâÑùµÄjsonÖУ¬"type" ¶ÔÓ¦µÄ "parents" Èç¹ûûÓÐ×¢²á£¬ÄÇô·´ÐòÁл¯µÄʱºòÕâ¸ö json Ëù´ú±íµÄ¶ÔÏó¾ÍΪ null ¡£

ÔÚAndroidÖÐÎÒÃÇ·´ÐòÁÐÕâÑùµÄ json ºóÒ»°ã»á°ÑµÃµ½µÄ¶ÔÏóµÄÉèÖõ½ÁÐ±í¿Ø¼þÉÏ£¬Èç¹ûºó¶Ë·µ»ØµÄ json Öаüº¬Ö®Ç°Î´×¢²áµÄÀàÐÍ£¬ÎªÁ˳ÌÐò²»ÖÁÓÚ crash£¬ÐèÒª¶Ô·´ÐòÁл¯µÄ null ¶ÔÏó½øÐйýÂË£¬ÏîÄ¿ÖÐÌṩÁËÒ»¸ö¹¤¾ßÀà ListItemFilter ¿ÉÒÔ¹ýÂ˼¯ºÏÖÐΪ null µÄÔªËØ¡£

½áÓï

¶ÔÓÚÈçºÎÓÅÑŵĽâÎöÕâÖÖÀàÐͲ»Í¬µÄ JsonObject £¬¸Õ¿ªÊ¼ÎÒÊÇȱÉÙ˼·µÄ£¬ÔÚÍøÉÏҲûÓв鵽ºÏÊʵÄÎĵµ¡£µ«ÊÇͨ¹ý²é¿´ Gson µÄÎĵµºÍÔ´Â룬ͨ¹ý×Ô¼ºµÄÀí½âºÍ·ÖÎö£¬Öð²½µÄÍê³ÉÁËÕâ¸ö¹ý³Ì¡£ÎÒµÄÒ»¸ö¸Ð´¥¾ÍÊÇ£¬¶àÈ¥¿´¿´¹Ù·½µÄʹÓÃÎĵµÓ¦¸Ã±ÈäĿȥËÑË÷½â¾ö·½°¸¸üºÃ¡£

´úÂëÊÇ×îºÃµÄÎĵµ£¬±¾ÎÄÖ»¼òµ¥½éÉÜÁËһЩʵÏÖ˼·£¬ÎÄÖÐÌù³öµÄһЩ´úÂëÊÇΪÁ˽²Êö·½±ã£¬ÓëÏîÄ¿ÖеĴúÂë¿ÉÄÜ»áÓÐÓÐÐ©Çø±ð¡£¾ßÌåµÄʹÓÿÉÒÔ¿´ÏîÄ¿£¨https://github.com/sososeen09/MultiTypeJsonParser£©ÖеÄÀý×Ó¡£

   
3193 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì