1

我正在编写一个生成 JSON 并将其输出到文件的程序。我输出到文件的第一个内容是以下 JSON 字符串:

var jsonStyle = {'color': '#004070',
    'weight': 2,
    'opacity': 0.9}

然后我使用 Python JSON 库生成 JSON 输出。这是我传入的 Python 对象json.dumps

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 编码。

4

2 回答 2

1

如何使用发送第一个 jsonStyle JSON json.dumps?更改变量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) 
于 2012-05-31T16:13:42.600 回答
1

您要编写的格式不是 JSON。该格式非常具体地说明什么可以是 json 对象中的值,并且它没有 javascript 变量的概念。您要编写的是 javascript,而不是 JSON - 这不一样。

因此,您可以简单地尝试删除特殊变量周围的引号,或者编写自己的序列化程序。

于 2012-05-31T16:13:47.723 回答