1

JSONを生成してファイルに出力するプログラムを書いています。ファイルに出力する最初のコンテンツは、次のJSON文字列です。

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

次に、PythonJSONライブラリを使用して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オブジェクトが含まれます。stylePythonでエンコードするときに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 変数の概念はありません。あなたが書こうとしているのは、JSON ではなく JavaScript です。それは同じではありません。

したがって、特殊変数を囲む引用符を削除するか、独自のシリアライザーを作成することができます。

于 2012-05-31T16:13:47.723 に答える