2017-09-21 6 views
0

私はいくつかのXMLをとり、xml2jsパッケージを通してJSONを取得しています。私は属性のリストのために "$"を得ているが、解析はうまくいった。例えば: - 私はつもりです

<AddresseeInformation name="SOME COMPANY LTD"></AddresseeInformation> 

は、私はMongoJSは私がDBにアップロードしようとすると、キー$は「$」で始めることはできませんと言っているとして、これをたくない

"AddresseeInformation":[{"$":{"name":"SOME COMPANY LTD"}}] 

になり"$"のすべてのインスタンスを変更したり、それを止める方法を見つけ出す必要があります。ここで

は、私はすべてのインスタンスを変更しようとした正規表現である:その

JSONstring.replace('"$"'/g, '"init"'); 
      .replace(/"$"/g, '"init"'); 
      .replace(/'"$"'/g, '"init"'); 

なしに働いていない - 私はあなたたちにそれを送信しています - また、誰もが解析されたXML属性を停止する方法を知っている場合"$"の鍵で私は永遠にあなたを愛しています。

+0

(あなた本当には注意が必要と"$で終わるキーを除外したい。そして、正規表現はおそらくとにかく最善の解決策ではない場合。値は"$"。それとも/(?<!\\)"\$"\s*:/gであることを起こる場合には技術的にそれはおそらく/"\$"\s*:/gでなければなりませんが) 'var parser = new require( 'xml2js')。パーサー({attrkey: 'ATTR'});'? –

+0

正規表現はJSON(またはXML、HTML)のようなネストされた構造を正しく扱うことができないため、JSON文字列でregexを使用するとJSONを破る危険性が非常に高くなります。それをしないでください。 JSONを変更する場合は、まずそのデータ構造を解析し、そのデータ構造を変更するコードを作成し、その結果をJSONにシリアル化して戻します。ここでのより良いオプションは、 'xml2js'が属性に使うキーをデフォルトの' '$' '以外のものに変更することです。これはXPathが使用するものであり、 '' ATTR ''のような文字列とは対照的に、XMLでは自然に発生することができないので、 '' @ ''を推奨します。 – Tomalak

答えて

0

This「オプション」の下には、パーサーをnew Parser({attrkey:"init"})で作成すると、必要なことが行われているようです。

RegExpソリューションの場合、$には特別な意味があり、それをエスケープする必要があります。/"\$"/g

+0

正規表現を使用してJSONを操作することはお勧めしません。正規表現は技術的にJSONに意味のある変更を加えることができません。 – Tomalak

+1

@Tomalak 1)私は正規表現を必ずしも推奨しているわけではありません。 2)JSONは、有効な標準に準拠したJSONを使用していることを前提にして、特定の検索と変更を正規表現で行うことができるほどシンプルであり、元の修正された正規表現は必要以上に変更される可能性があります)。 JSONはコメントをつけられず、ほとんどの文字は文字列の外に出ることができないので、 '' $ "'は常に文字列になり、 '' $ '': 'は常にキー名になります。 – chridd

関連する問題