将内容写入已有 headers 的 json 文件
Writing contents to json file which already has headers
所以我正在试验 happybase,我想将扫描序列的内容写入 json 文档,其中包含我已经放入的骨架。这是预期输出文件的骨架:
[{
"Key": "",
"Values": ""
}]
我希望通过代码实现预期 json 文件的最终格式:
[{
"Key":"01/01/2009",
"Values": {
"actual:number":30000,
"predicted:number":40000
}
},
{
"Key":"01/02/2009",
"Values": {
"actual:number":30000,
"predicted:number":40000
}
}]....
我的 Hbase Table 的结构是这样的:
'01/01/2009','actual:number',value='30000'
'01/02/2009','predicted:number',value='40000'
这是我用来访问 table:
的代码
import happybase
import simplejson as sjson
import json
connection = happybase.Connection('localhost')
table = connection.table('Date-Of-Repairs')
file = open('test.json','wb+')
for key, data in table.scan(row_start='01/01/2009'):
a = key, data
print sjson.dumps(a)
json.dump(a,file, indent = 2)
file.close()
我想知道如何实现我想要的 json 输出文件,以及如何阻止写入 json 的内容像这样打印出来:
[
"01/01/2009",
{
"Actual:number": "10000",
"Predicted:number": "30000"
}
][
"01/02/2009",
{
"Actual:number": "40000",
"Predicted:number": "40000"
}
][
"01/03/2009",
{
"Actual:number": "50000",
"Predicted:number": "20000"
}
]
因为这是输出文件中显示的当前输出
Python json 库对 JSON 文本使用标准格式 它具有 indent
参数,可以帮助您控制缩进时应考虑的空格数.
json.dumps(pydict, indent=4)
如果您需要压缩的 JSON,这很适合在生产中使用,您可以简单地忽略它,python 将生成缩小的文本,从而减少网络流量和解析时间。
如果你想要你的打印方式,那么你必须自己实现它,有一个模块叫做pjson你可以把它作为一个例子来说明如何做。
谢谢@anand。我想出了答案。我只需要创建一个字典来存储 table 数据,然后附加到要存储在文件中的列表,这会产生一个完整的 json 文件。
代码如下:
import happybase
import json
import csv
file = open('test.json','wb+')
store_file = {}
json_output = []
for key, data in table.scan(row_start='01/01/2009'):
store_file['Key'] = key
store_file['Value'] = data
json_output.append(store_file.copy())
print json_output
json.dump(json_output,file, indent = 2)
file.close()
这将产生:
[
{
"Key": "01/01/2009",
"value": {
"Actual:number": "10000",
"Predicted:number": "30000"
}
},
{
"Key": "01/02/2009",
"value": {
"Actual:number": "40000",
"Predicted:number": "40000"
}
},
{
"Key": "01/03/2009",
"value": {
"Actual:number": "50000",
"Predicted:number": "20000"
}
}
]
我希望这对遇到此类问题的任何人有所帮助。
所以我正在试验 happybase,我想将扫描序列的内容写入 json 文档,其中包含我已经放入的骨架。这是预期输出文件的骨架:
[{
"Key": "",
"Values": ""
}]
我希望通过代码实现预期 json 文件的最终格式:
[{
"Key":"01/01/2009",
"Values": {
"actual:number":30000,
"predicted:number":40000
}
},
{
"Key":"01/02/2009",
"Values": {
"actual:number":30000,
"predicted:number":40000
}
}]....
我的 Hbase Table 的结构是这样的:
'01/01/2009','actual:number',value='30000'
'01/02/2009','predicted:number',value='40000'
这是我用来访问 table:
的代码import happybase
import simplejson as sjson
import json
connection = happybase.Connection('localhost')
table = connection.table('Date-Of-Repairs')
file = open('test.json','wb+')
for key, data in table.scan(row_start='01/01/2009'):
a = key, data
print sjson.dumps(a)
json.dump(a,file, indent = 2)
file.close()
我想知道如何实现我想要的 json 输出文件,以及如何阻止写入 json 的内容像这样打印出来:
[
"01/01/2009",
{
"Actual:number": "10000",
"Predicted:number": "30000"
}
][
"01/02/2009",
{
"Actual:number": "40000",
"Predicted:number": "40000"
}
][
"01/03/2009",
{
"Actual:number": "50000",
"Predicted:number": "20000"
}
]
因为这是输出文件中显示的当前输出
Python json 库对 JSON 文本使用标准格式 它具有 indent
参数,可以帮助您控制缩进时应考虑的空格数.
json.dumps(pydict, indent=4)
如果您需要压缩的 JSON,这很适合在生产中使用,您可以简单地忽略它,python 将生成缩小的文本,从而减少网络流量和解析时间。
如果你想要你的打印方式,那么你必须自己实现它,有一个模块叫做pjson你可以把它作为一个例子来说明如何做。
谢谢@anand。我想出了答案。我只需要创建一个字典来存储 table 数据,然后附加到要存储在文件中的列表,这会产生一个完整的 json 文件。
代码如下:
import happybase
import json
import csv
file = open('test.json','wb+')
store_file = {}
json_output = []
for key, data in table.scan(row_start='01/01/2009'):
store_file['Key'] = key
store_file['Value'] = data
json_output.append(store_file.copy())
print json_output
json.dump(json_output,file, indent = 2)
file.close()
这将产生:
[
{
"Key": "01/01/2009",
"value": {
"Actual:number": "10000",
"Predicted:number": "30000"
}
},
{
"Key": "01/02/2009",
"value": {
"Actual:number": "40000",
"Predicted:number": "40000"
}
},
{
"Key": "01/03/2009",
"value": {
"Actual:number": "50000",
"Predicted:number": "20000"
}
}
]
我希望这对遇到此类问题的任何人有所帮助。