json数据解析不能解析含有大写字母的key的数据??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json数据解析不能解析含有大写字母的key的数据??相关的知识,希望对你有一定的参考价值。
有人用过Jackson库解析json字符串吗?我做了的所有的都没问题?但是出现一个关键问题: 当每个键有大写字母的时候就不能解析啊,有没有朋友解决过,还望帮助一下,感觉这么好的框架不应该存在不能解析喊大写的字符串啊。。。。。。。。求解
参考技术A [mw_shl_code=java,true]@JsonProperty("title") private String title;[/mw_shl_code]你这样写试试?你的变量名可以是任意的。JsonProperty你定义成首字母大写的试试 参考技术B String hh="\"Version\":\"1.0\",\"Service\":\"ReportProperty\""; try AllInfoBean a= objectMapper.readValue(dd, AllInfoBean.class); Log.v("1+++____-----", ""+a.getService()); Log.v("1+++____-----", ""+a.getVersion());public class AllInfoBean private String Version; private String Service; public String getVersion() return Version; public void setVersion(String version) Version = version; public String getService() return Service; public void setService(String service) Service = service; 参考技术C 是正确的啊,我都能解析,也就是我把含大写字母的数据全部转为小写的就可以, 参考技术D 你的实体是怎么写的?你的实体里面指定的key与json里面的一样的吧?你是直接用变量名来当成key还是定义了jsonProperties??? 第5个回答 2013-11-22 这应该不会的 我们在运用json格式传输数据的时候 大写的字母肯定会包含的没有出现过这种情况你check一下你生存的json格式的数据 看看数据格式正确吗?python 如何解析含有重复key的json
文章目录
摘要
json里面的key默认是唯一,但是有些情况下json里面的key值并不唯一。比如我在分析WIFI协议的时候,如下图:
这时候就需要解决key重复的问题。那么如何解决呢?
不处理的情况
例如:
"key":"1", "key":"2", "key":"3", "key2":"4"
把上面的值写入到json文件中。
如果不处理重复key的问题,输出结果会怎么样?
代码如下:
import json
json_list="key": "1", "key": "2", "key": "3", "key2": "4"
with open("4.json",'r',encoding='utf8') as fp:
json_data = json.load(fp)
print(json_data)
输出结果:
重复的key,程序默认只保留了最后一个值,这样显然不符合我们的需求。我们希望的结果是:
"key":["1","2","3"],
"key2":"4"
所以该怎么解决呢?
解决方法
首先来看一下解析函数load函数,如下:
def load(fp, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
a JSON document) to a Python object.
``object_hook`` is an optional function that will be called with the
result of any object literal decode (a ``dict``). The return value of
``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``object_pairs_hook`` is an optional function that will be called with the
result of any object literal decoded with an ordered list of pairs. The
return value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders. If ``object_hook``
is also defined, the ``object_pairs_hook`` takes priority.
object_hook
是一个可选函数,将使用任何对象文字解码(dict
)的结果调用。
object_hook
的返回值将被用来代替dict
。 此功能可用于实现自定义解码器(例如 JSON-RPC 类提示)。
object_pairs_hook
是一个可选函数,将使用任何对象字面量的结果以有序的对列表解码的结果调用。
object_pairs_hook
的返回值将被用来代替dict
。 此功能可用于实现自定义解码器。 如果还定义了“object_hook”,则“object_pairs_hook”优先。
object_pairs_hook是个回调函数,在解析json文本的时候会调用它并更改返回的结果。为了得到前述的结果,我们定义如下的hook函数:
def obj_pairs_hook(lst):
result=
count=
for key,val in lst:
if key in count:count[key]=1+count[key]
else:count[key]=1
if key in result:
if count[key] > 2:
result[key].append(val)
else:
result[key]=[result[key], val]
else:
result[key]=val
return result
然后在执行load的时候加上这个函数。代码如下:
import json
def obj_pairs_hook(lst):
result=
count=
for key,val in lst:
if key in count:count[key]=1+count[key]
else:count[key]=1
if key in result:
if count[key] > 2:
result[key].append(val)
else:
result[key]=[result[key], val]
else:
result[key]=val
return result
with open("4.json",'r',encoding='utf8') as fp:
json_data = json.load(fp,object_pairs_hook=obj_pairs_hook)
print(json_data)
输出结果:
参考文章:
https://blog.csdn.net/dahlwuyn/article/details/52293544
以上是关于json数据解析不能解析含有大写字母的key的数据??的主要内容,如果未能解决你的问题,请参考以下文章
JSON.parse不能解析j包含回车字符的son数据的问题
java JsonObject怎么判断一个json串中是不是含有某个key值????