我注意到JSON对象中元素的顺序不是原始顺序.
那些JSON列表的元素呢?他们的订单是否保持?
我喜欢Python中的pprint模块.我经常使用它进行测试和调试.我经常使用width选项来确保输出在我的终端窗口中很好地适应.
它一直运行良好,直到他们在Python 2.7中添加了新的有序字典类型(我非常喜欢的另一个很酷的功能).如果我试着漂亮地打印一个有序的字典,它就不能很好地显示出来.而不是将每个键值对放在它自己的行上,整个事物显示在一条长行上,它包含很多次并且难以阅读.
这里有没有人有办法让它打印得很好,就像旧的无序词典一样?如果我花了足够的时间,我可能会想出一些东西,可能使用PrettyPrinter.format方法,但我想知道这里是否有人知道解决方案.
更新:我为此提交了一份错误报告.您可以在http://bugs.python.org/issue10592上看到它.
我正在努力解决以下问题:我想转换OrderedDict如下:
OrderedDict([('method', 'constant'), ('data', '1.225')])
Run Code Online (Sandbox Code Playgroud)
成为这样的常规字典:
{'method': 'constant', 'data':1.225}
Run Code Online (Sandbox Code Playgroud)
因为我必须将它作为字符串存储在数据库中.转换后,订单不再重要,所以无论如何我都可以省去订购的功能.
感谢任何提示或解决方案,
本
我在python中遇到了JSON的问题.
事实上,如果我尝试执行此代码,python会给我一个排序的JSON字符串!
例如:
values = {'profile' : 'testprofile',
'format': 'RSA_RC4_Sealed',
'enc_key' : base64.b64encode(chiave_da_inviare),
'request' : base64.b64encode(data)
}
values_json = json.dumps(values, sort_keys=False, separators=(',', ':'))
Run Code Online (Sandbox Code Playgroud)
这是输出:
{"profile":"testprofile","enc_key":"GBWo[...]NV6w==","request":"TFl[...]uYw==","format":"RSA_RC4_Sealed"}
Run Code Online (Sandbox Code Playgroud)
如你所见,我试图使用"sort_keys = False",但没有任何改变.
如何阻止Python对JSON字符串进行排序?
我有一个包含JSON对象的文件.它已按以下方式加载:
with open('data.json', 'r') as input_file:
input_data = input_file.read()
Run Code Online (Sandbox Code Playgroud)
此时input_data只包含一个字符串,现在我继续将其解析为JSON:
data_content = json.loads(input_data.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
data_content具有字符串的JSON表示,这是我需要的,但由于某些原因,在json.loads之后我不清楚它正在改变键的原始顺序,所以例如,如果我的文件包含如下内容:
{ "z_id": 312312,
"fname": "test",
"program": "none",
"org": null
}
Run Code Online (Sandbox Code Playgroud)
在json.loads之后,订单被改变为让我们说:
{ "fname": "test",
"program": None,
"z_id": 312312,
"org": "none"
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?有没有办法保存订单?我正在使用Python 2.7.
我试图保持Python字典的顺序,因为native dict没有任何顺序.SE中的许多答案建议使用OrderedDict.
from collections import OrderedDict
domain1 = { "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
"us": "United States", "no": "Norway" }
domain2 = OrderedDict({ "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
"us": "United States", "no": "Norway" })
print domain1
print " "
for key,value in domain1.iteritems():
print (key,value)
print " "
print domain2
print ""
for key,value in domain2.iteritems():
print (key,value)
Run Code Online (Sandbox Code Playgroud)
迭代后,我需要字典来维护其原始顺序并将键和值打印为原始:
{
"de": "Germany",
"sk": "Slovakia",
"hu": "Hungary",
"us": "United States",
"no": "Norway"
}
Run Code Online (Sandbox Code Playgroud)
但是,我使用的任何一种方式都不会保留此顺序.
当我想将json字符串转换为Python字典时,我有问题.我有类似的字符串
s={"name":{"Saban:Saulic"},"price":{"koncert:1000"} ....}
Run Code Online (Sandbox Code Playgroud)
当我写的东西像
tags=json.loads(s)
Run Code Online (Sandbox Code Playgroud)
我gtet字典但键的顺序与字符串不一样(它不是名字,价格......).如何将json字符串转换为字典并在键中保存顺序?
在此处的文档中 - https://docs.python.org/3/library/json.html
它说object_pairs_hook:
object_pairs_hook 是一个可选函数,它将使用任何用有序对列表解码的对象文字的结果调用。将使用 object_pairs_hook 的返回值而不是 dict。此功能可用于实现自定义解码器。如果还定义了 object_hook,则 object_pairs_hook 优先。
在这个答案中有一个相当令人印象深刻的例子。
我不明白什么是“钩子”或者这个功能是如何工作的。文档并没有真正清楚地解释它。我现在想写一个(否则我正在解析的字符串上会出现一堆字符串方法)
有没有人知道有关此功能的教程或对其有足够的了解以详细解释它的工作原理?他们似乎在文档中假设您知道黑匣子中发生了什么json.loads()
假设我们有以下 JSON 文件。为了示例起见,它是由字符串模拟的。字符串是输入,Tree对象应该是输出。我将使用树的图形表示法来呈现输出。
我发现以下类可以在 Python 中处理树概念:
class TreeNode(object):
def __init__(self, data):
self.data = data
self.children = []
def add_child(self, obj):
self.children.append(obj)
def __str__(self, level=0):
ret = "\t"*level+repr(self.data)+"\n"
for child in self.children:
ret += child.__str__(level+1)
return ret
def __repr__(self):
return '<tree node representation>'
class Tree:
def __init__(self):
self.root = TreeNode('ROOT')
def __str__(self):
return self.root.__str__()
Run Code Online (Sandbox Code Playgroud)
输入文件可以具有不同的复杂性:
输入:
json_file = '{"item1": "end1", "item2": "end2"}'
输出:
"ROOT"
item1
end1
item2
end2
Run Code Online (Sandbox Code Playgroud)
输入:
json_file = {"item1": "end1", "item2": {"item3": "end3"}}
输出: …
我已将格式化我的字符串看起来像JSON我可以做到的json.loads.当我在屏幕上打印时,它结果搞砸了订单.我知道Python的dictonaries没有订购,但有没有办法保持这个顺序?我真的需要保留它.谢谢!
python ×9
json ×7
python-2.7 ×3
arrays ×1
dictionary ×1
javascript ×1
list ×1
parsing ×1
pprint ×1
pretty-print ×1
python-3.x ×1
recursion ×1
sorting ×1
tree ×1