オブジェクトのプロパティは、特定の順序で格納または読み込まれることが保証されていません。注文を変更せずに既存のオブジェクトを移動する
問題は、オブジェクトまたは配列を使用するのは私自身の問題ではないということです。私はすでに次のように大きく大きく入れ子になったJSONファイルを持っています。
{ "occasion": 23, "mayorstips": { "1": 0, "3": 0, "2": 0...
私はいくつかの変更が必要です。このアプローチに
fs.writeFileSync(theJSONFile, JSON.stringify(campaign));
さて、私が気づいた二つの問題:私は終わりだとき
var campaign = JSON.parse(fs.readFileSync(theJSONFile));
for(var plot in plots) {
if(plots.hasOwnProperty(plot)) {
switch(plots[plot].province) {
case 'forest':
...
、私はただでそれを戻す:これは、私はそれで作業を開始する方法です
- 元のスペーシング形式は失われています。元のファイルはの1つの長い行であり、1つの長い行である必要がありますので、
JSON
ライブラリによる書式設定の試行は役に立ちませんでした。私はいくつかの正規表現の置き換えでそれを解決しました。 - 「JSONライン」ファイルは、にソートされました。だから私は
{ "1": 0, "3": 0, "2": 0
から{ "1": 0, "2": 0, "3": 0
に行きました、そして、それは大きな問題であることが判明しました。 - で終わるフロート番号は、のように切り捨てられます。このファイルには、浮動小数点数が常に6桁の小数点以下を持つ必要があります。たとえば、34.293800です。しかし、私がそれを開くと、番号は34.2938に変わります!
35000文字の行です。それはどのように問題#2と#3を解決することができますか?私は#3のためにもう一つの正規表現を置き換えることができますが、おそらくそこには何かがありません。
あなたが読んでいるjsonファイルは、あなたが作成したものか、どこかから取得していますか?あなたが作成した場合は、その構造を変更することを強くお勧めします。任意の場所で注文が問題になる場合は、オブジェクトのプロパティではなく配列に格納してください。 0があなたにとって重要な場合は、それらの数字を文字列に入れておきます。 – shinobi
それは彼の責任ではないと言います。私が見る唯一のオプションは、配列を維持してからそれを元に戻すためにデータを配列にプッシュすることです。これは、各JSエンジンが別々にソートするので、JSONを使って完全に行うことはできません。 http://stackoverflow.com/questions/8931967/how-to-deterministically-verify-that-a-json-object-hasnt-been-modified – JSB
このような制限付きのユースケースについては、私は文字列の操作をお勧めします部分文字列の検索を行い、キーとその値を見つけます。その後、文字列を置換/操作します。このアプローチは非効率ですが、あなたの制限を考えれば...... –