2016-12-17 31 views
2

Yallo、私はなぜnotes = JSON.parse(notesString)が配列に私のjson文字列を渡すのではなく、文字列に変換しているのかを知りました。私は前と後にtypeofをチェックしてテストしました。なぜプッシュはもはや配列ではないので使用できない理由を理解しています。私は解決策を知らない。JSON.parseを配列に渡す代わりに文字列に変換する

コード

// array to store notes in 
var notes = []; 

// note JSON object 
var note = { 
    title: title, 
    body: body 
}; 

try { 
    // read pre-existing content of notes-data.json file 
    var notesString = fs.readFileSync('notes-data.json'); 

    // store pre-existing data as the notes array, passing as 
    // JSON 
    console.log("notesString: " + typeof notesString) 
    console.log("notes before parse: " + typeof notes) 

    notes = JSON.parse(notesString) 

    console.log("notes after parse:" + typeof notes) 
} catch (e) { 

} 

// add note to notes array 
notes.push(note) 

// store content of notes array in notes-data.json as a string 
fs.writeFileSync('notes-data.json', JSON.stringify(notes)); 

これは私のJSON私は何が起こっていたか分からないが、私は持っている必要があり 申し訳ありません人々を解決

"[{\"title\":\"herp\",\"body\":\"derp\"},{\"title\":\"herp\"‌​‌​,\"body\":\"derp\"‌​}]‌​" 

出力

notesString: object 
notes before parse: object 
notes after parse:string 
C:\Visual Studio 2015\Projects\Note_App_NodeJS\Note_App_NodeJS\notes.js:32 
    notes.push(note) 
     ^

TypeError: notes.push is not a function 

です私の出力/入力を最初に検証した。私はそれがなぜそのようにフォーマットされたのか分かりませんし、正しいjsonフォーマットで書かれています。なぜなら、stingifyに変換してから解析するからです。私はVisual StudioとNodejsエクステンションを使用していますので、おそらくそれと関係があります。

+2

'notes-data.json'とは何ですか? – nicovank

+0

これをテストしたところ、JSONファイルには配列ではなく文字列が含まれているという唯一の説明があります。あなたの[mcve]にはこの質問の理解に不可欠なJSONデータが欠けています。 – Quentin

+0

空の.jsonファイル – gxminbdd

答えて

3

外側の引用符のために文字列です。これらを削除すると、JSONが無効になります。 JSONルールに従ってフォーマットする必要があります。すべてのキーは文字列でなければならず、値は文字列、数値、ブール値、配列またはその他のJSONオブジェクトのようなプリミティブのみになります。 http://json.org/example.html

+0

"あなたのJSONは無効です" - これは完全に有効な文字列です。 – Quentin

+0

外側の引用符を削除しない場合。彼は弦を持つことを望んでいません。 – germanfr

1

sorry I should have been more specific at the momment it contains

"[{\"title\":\"herp\",\"body\":\"derp\"},{\"title\":\"herp\"‌​,\"body\":\"derp\"}]‌​" 

あなたはそれを解析するときに文字列を取得する理由である文字列のJSON表現です:あなたはいくつかの例を見ることができます

フォーマットあなたのJSONのような

ここ
[ 
    { 
     "title": "herp", 
     "body":"derp" 
    }, 
    { 
     "title":"herp"‌​‌​, 
     "body":"derp"‌ 
    ​} 
]‌​ 

文字列には、探している配列であるJSONのネストされたセットが含まれています。

文字列からその配列を抽出し、ファイルに配置します。

[{"title":"herp","body":"derp"},{"title":"herp"‌​,"body":"derp"}]‌​ 
関連する問題