python: 将嵌套的 dict 转为 JSON-like 格式
python: turn nested dict into JSON-like format
我有一个嵌套的字典,形式如下:
dict = {
"BLOCK_NAME": {
"SUB_BLOCK_NAME1": {
"ENTRY_NUMBER1": {
"FIELD_NAME" : "VALUE"
"FIELD_NAME2" : "VALUE2"
"FIELD_NAME3" : "VALUE3"
}
}
}
}
我想使用 jquery 树 table 插件 (w2ui) 在 HTML 页面中显示它。插件从以下格式的数据初始化:
{ recid: 1, key_1: 'John', key_2: 'doe', w2ui: { children: [] }},
{ recid: 2, key_1: 'Stuart', key_2: 'Motzart',
w2ui: {
children: [
{ recid: 21, key_1: 'Stuart', key_2: 'Motzart',w2ui: { children: [] } },
{ recid: 22, key_1: 'Jin', key_2: 'Franson',
w2ui: {
children: [
等等...
我正在使用 Jinja2 作为模板引擎,我在想什么是完成这项任务的最佳方式。
我能想到的方案有:
编写一个 python 函数,将 dict 转换为与该插件格式匹配的长字符串,并将其传递给 Jinja。
将所有逻辑放在模板中,同时我对其进行迭代并创建 JS 格式。
将dict保存为JSON并用JS处理(不太好,我的JS很弱)
你怎么看?
编辑: 按照@mpf82 的回答,我尝试了以下操作:
HTML:
<script type="text/javascript">
$(function () {
$('#grid').w2grid({
name: 'grid',
url : 'get_json',
show: {
toolbar: true,
},
multiSearch: false,
searches: [
{ field: 'lname', caption: 'Last Name', type: 'text' },
{ field: 'fname', caption: 'First Name', type: 'text' },
{ field: 'email', caption: 'Email', type: 'text' },
{ field: 'sdate', caption: 'Start Date', type: 'date' }
],
columns: [
{ field: 'lname', caption: 'Last Name', size: '30%' },
{ field: 'fname', caption: 'First Name', size: '30%' },
{ field: 'email', caption: 'Email', size: '40%' },
{ field: 'sdate', caption: 'Start Date', size: '90px' }
]
});
w2utils.settings['dataType'] = 'JSON'
});
</script>
Cherrypy:
@cherrypy.expose
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def get_json(self):
try:
# optionally get the w2ui request
requested_data = cherrypy.request.json
except:
pass
# build your w2ui data dict
my_data = { recid: 1, fname: 'John', lname: 'doe', email: 'jdoe@gmail.com', sdate: '4/3/2012', w2ui: { children: [] }}
# return dict, no further conversion neccessary
return my_data
我从 Cherrypy 收到错误 415:不支持的媒体类型
预期内容类型为 application/json、text/javascript
的实体
你可以简单地将你的字典转储到 JSON-like 字符串中:
import json
# You may need some converting: dict = convert_to_jq_format(dict)
result = json.dumps(dict)
并将结果传递给 Jinja 的模板。
当然,如果你的dict不符合插件的格式,你应该先转换它。
无需通过 jinja 传递数据或创建长字符串。
而是使用 w2ui 网格的 url 属性,将 w2utils 设置为使用 JSON (w2utils.settings.dataType = 'JSON';
),如果您使用的是 cherrypy,则只需要做的是在 URL:
上使用 JSON 装饰器
@cherrypy.expose
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def my_url():
try:
# optionally get the w2ui request
requested_data = cherrypy.request.json
except:
pass
# build your w2ui data dict
my_data = { recid: 1, key_1: 'John', key_2: 'doe', w2ui: { children: [] }}
# return dict, no further conversion neccessary
return my_data
我有一个嵌套的字典,形式如下:
dict = {
"BLOCK_NAME": {
"SUB_BLOCK_NAME1": {
"ENTRY_NUMBER1": {
"FIELD_NAME" : "VALUE"
"FIELD_NAME2" : "VALUE2"
"FIELD_NAME3" : "VALUE3"
}
}
}
}
我想使用 jquery 树 table 插件 (w2ui) 在 HTML 页面中显示它。插件从以下格式的数据初始化:
{ recid: 1, key_1: 'John', key_2: 'doe', w2ui: { children: [] }},
{ recid: 2, key_1: 'Stuart', key_2: 'Motzart',
w2ui: {
children: [
{ recid: 21, key_1: 'Stuart', key_2: 'Motzart',w2ui: { children: [] } },
{ recid: 22, key_1: 'Jin', key_2: 'Franson',
w2ui: {
children: [
等等... 我正在使用 Jinja2 作为模板引擎,我在想什么是完成这项任务的最佳方式。
我能想到的方案有:
编写一个 python 函数,将 dict 转换为与该插件格式匹配的长字符串,并将其传递给 Jinja。
将所有逻辑放在模板中,同时我对其进行迭代并创建 JS 格式。
将dict保存为JSON并用JS处理(不太好,我的JS很弱)
你怎么看?
编辑: 按照@mpf82 的回答,我尝试了以下操作:
HTML:
<script type="text/javascript">
$(function () {
$('#grid').w2grid({
name: 'grid',
url : 'get_json',
show: {
toolbar: true,
},
multiSearch: false,
searches: [
{ field: 'lname', caption: 'Last Name', type: 'text' },
{ field: 'fname', caption: 'First Name', type: 'text' },
{ field: 'email', caption: 'Email', type: 'text' },
{ field: 'sdate', caption: 'Start Date', type: 'date' }
],
columns: [
{ field: 'lname', caption: 'Last Name', size: '30%' },
{ field: 'fname', caption: 'First Name', size: '30%' },
{ field: 'email', caption: 'Email', size: '40%' },
{ field: 'sdate', caption: 'Start Date', size: '90px' }
]
});
w2utils.settings['dataType'] = 'JSON'
});
</script>
Cherrypy:
@cherrypy.expose
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def get_json(self):
try:
# optionally get the w2ui request
requested_data = cherrypy.request.json
except:
pass
# build your w2ui data dict
my_data = { recid: 1, fname: 'John', lname: 'doe', email: 'jdoe@gmail.com', sdate: '4/3/2012', w2ui: { children: [] }}
# return dict, no further conversion neccessary
return my_data
我从 Cherrypy 收到错误 415:不支持的媒体类型 预期内容类型为 application/json、text/javascript
的实体你可以简单地将你的字典转储到 JSON-like 字符串中:
import json
# You may need some converting: dict = convert_to_jq_format(dict)
result = json.dumps(dict)
并将结果传递给 Jinja 的模板。
当然,如果你的dict不符合插件的格式,你应该先转换它。
无需通过 jinja 传递数据或创建长字符串。
而是使用 w2ui 网格的 url 属性,将 w2utils 设置为使用 JSON (w2utils.settings.dataType = 'JSON';
),如果您使用的是 cherrypy,则只需要做的是在 URL:
@cherrypy.expose
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def my_url():
try:
# optionally get the w2ui request
requested_data = cherrypy.request.json
except:
pass
# build your w2ui data dict
my_data = { recid: 1, key_1: 'John', key_2: 'doe', w2ui: { children: [] }}
# return dict, no further conversion neccessary
return my_data