我正在编写一个生成JSON并将其输出到文件的程序。我输出到该文件的第一个内容是以下JSON字符串:
var jsonStyle = {'color': '#004070',
'weight': 2,
'opacity': 0.9}
然后我使用Python JSON库生成JSON输出。这是我传递给json.dumps
的Python对象:
js = {'type': 'Feature',
'properties':
{'style': 'jsonStyle'},
'geometry': geomJSON}
我希望文本输出是:
js = {'type': 'Feature',
'properties':
{'style': jsonStyle},
'geometry': geomJSON}
这样我可以在输出文件的顶部编辑jsonStyle
以更改所有后续JSON元素的样式。问题是,我构造JSON对象的当前方式输出'jsonStyle'
,这是一个字符串,而不是Javascript变量名。如果我将样式键设置为我输出的样式字符串的字典版本,它将包含每个后续JSON元素的JSON对象。我不知道在用Python编码时如何让style
引用Javascript变量名。
我宁愿不为此做字符串操作,但我可以依靠它。
我想我实际上并没有使用JSON。我将它们作为变量输出到Javascript文件,以便我可以将它们作为JSON对象包含在另一个Javascript文件中。看起来我要么需要使用YAML,要么只是进行某种字符串编辑并放弃严格的JSON编码。
答案 0 :(得分:1)
如何使用json.dumps
发送第一个jsonStyle JSON?更改变量jsonStylePyObject
,它会反映在所有其他JSON中。如下所示:
jsonStylePyObject = {'color': '#004070',
'weight': 2,
'opacity': 0.9}
myFile.write(json.dumps(jsonStyle))
#then use it normally
js = {'type': 'Feature',
'properties':
{'style': jsonStylePyObj},
'geometry': geomJSON}
myFile.write(json.dumps(jsonStr))
或者您可以使用字符串替换。这实际上是糟糕,并没有真正建议。你可以在style
字段中有一个唯一的字符串,例如“MY_UNIQUE_STRING $#!@#”,并在其上进行字符串替换。类似的东西:
jsonStr = json.dumps({'type': 'Feature',
'properties':
{'style': "MY_UNIQUE_STRING$#!@#"},
'geometry': geomJSON})
quotes_char = "\'"
jsonStr = jsonStr.replace("%sMY_UNIQUE_STRING$#!@#%s"%(quotes_char, quotes_char), "jsonStyle")
myFile.write(jsonStr)
答案 1 :(得分:1)
您要编写的格式is not JSON。格式非常具体,可以是json对象中的值,并且它没有javascript变量的概念。你要写的是javascript,而不是JSON - 而且不一样。
因此,您只需尝试删除特殊变量周围的引号,或编写自己的序列化程序。