创建NumPy数组并将其保存为Django上下文变量后,加载网页时收到以下错误:
array([ 0, 239, 479, 717, 952, 1192, 1432, 1667], dtype=int64) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
所以我使用的是Python 2.7,使用该json模块对以下数据结构进行编码:
'layer1': {
'layer2': {
'layer3_1': [ long_list_of_stuff ],
'layer3_2': 'string'
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我使用漂亮的打印方式打印出来,如下所示:
json.dumps(data_structure, indent=2)
Run Code Online (Sandbox Code Playgroud)
哪个好,除了我要缩进所有内容,除了内容"layer3_1"- 这是一个列出坐标的大量字典,因此,在每个上面设置一个值使得漂亮的打印创建一个包含数千行的文件,示例如下:
{
"layer1": {
"layer2": {
"layer3_1": [
{
"x": 1,
"y": 7
},
{
"x": 0,
"y": 4
},
{
"x": 5,
"y": 3
},
{
"x": 6,
"y": 9
}
],
"layer3_2": "string"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是类似于以下内容:
{
"layer1": {
"layer2": {
"layer3_1": [{"x":1,"y":7},{"x":0,"y":4},{"x":5,"y":3},{"x":6,"y":9}],
"layer3_2": "string"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我听说可以扩展json模块:是否可以将其设置为仅在"layer3_1"对象内部时关闭缩进?如果是这样,有人请告诉我怎么样?
你可以取消引用从idPython函数中检索的变量id 吗?例如:
dereference(id(a)) == a
Run Code Online (Sandbox Code Playgroud)
我想从学术角度来了解; 我知道有更实用的方法.
我正在尝试设置python json库以保存为包含其他词典元素的字典.有许多浮点数,我想限制位数,例如7.
根据SO中的其他帖子,encoder.FLOAT_REPR如果它不起作用将被使用.
例如,以下在Python3.7.1中运行的代码打印所有数字:
import json
json.encoder.FLOAT_REPR = lambda o: format(o, '.7f' )
d = dict()
d['val'] = 5.78686876876089075543
d['name'] = 'kjbkjbkj'
f = open('test.json', 'w')
json.dump(d, f, indent=4)
f.close()
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
它可能无关紧要,但我在OSX上.
编辑
这个问题被标记为重复.然而,在原始的接受(并且直到现在唯一)答案中,明确说明:
注意:此解决方案不适用于python 3.6+
所以解决方案不合适.此外,它使用的是库simplejson 而不是库json.