在Python JSON中编码Javascript变量名

时间:2012-05-31 15:50:03

标签: python json

我正在编写一个生成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编码。

2 个答案:

答案 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 - 而且不一样。

因此,您只需尝试删除特殊变量周围的引号,或编写自己的序列化程序。