Python的新版本: 2.7.10,机器:MacOS塞拉利昂。
Susi Sushanti Don $ python -c "import sys, json; print(json.load(open('/tmp/2.json'))['pages'])"
{u'giga-10': [u'overview']}
Susi Sushanti Don $ python -c "import sys, json; print(str(json.load(open('/tmp/2.json'))['pages']))"
{u'giga-10': [u'overview']}为什么即使我使用了u,python仍然打印str()字符?我在其他文章中看到,使用string不会在std输出中打印它。是否有类似的str()函数可以在任何Python数据对象上工作(而不是自己编写可重用的函数)?
我希望输出仅仅是{'giga-10': ['overview']}
发布于 2017-08-17 22:42:32
为此,为什么不对一个班轮使用jq JQ实用程序。
您可以实现:
$ echo `jq ".pages" /tmp/2.json`
{ "giga-10": [ "overview" ] }别忘了查看这个网址:https://jqplay.org/ --它确实帮助我学习/观察jq将如何处理输入数据。
发布于 2017-08-17 22:31:01
它仍然在打印u,因为您的对象中有一些元素是unicode对象,这就是python打印包含unicode对象的对象的方式。
>>> x = {u'giga-10': [u'overview']}
>>> print x
{u'giga-10': [u'overview']}有unicode对象是有意义的,因为您正在反序列化JSON,对应于JSON字符串的适当数据结构是Python2 unicode对象。
注意,如果打印一个unicode对象,它就不会打印u,因为u实际上不是unicode字符串的一部分:
>>> print u"hello"
hello这真的不重要。你应该让它停止困扰你。但是,如果您出于某种疯狂的原因坚持要摆脱这些u,那么您必须将从JSON反序列化的任意对象中的任何unicode对象转换为str类型。这需要解码unicode对象。只要您没有提供任何钩子,下面的内容就应该适用于json.load的任何结果
>>> def stringify(obj):
... if isinstance(obj, unicode):
... return obj.encode('utf8')
... elif isinstance(obj, list):
... return [stringify(x) for x in obj]
... elif isinstance(obj, dict):
... return {stringify(k):stringify(v) for k,v in obj.iteritems()}
... else:
... return obj
...
>>> print stringify(x)
{'giga-10': ['overview']}但是没有充分的理由这样做,除非您真的需要Python2 str,即“字节字符串”。你几乎肯定没有,或者至少,没有说明为什么你会这样做。
发布于 2017-08-18 18:31:37
如果要使用python,您可能需要json.dumps()。e.g
$ cat data.json
{"pages": {"giga-10": ["overview"]}}
$ python -c 'import sys, json; x = json.load(open(sys.argv[1])); print json.dumps(x["pages"])' data.json
{"giga-10": ["overview"]}https://stackoverflow.com/questions/45745684
复制相似问题