2016-12-18 5 views
0

私はここで奇妙な状況があります。私はそのテキストファイルをロードするためにfs.readFile(text file)を使用して、array = data.split("\n")線でテキストファイルを分割し、その後、挿入配列内の各オブジェクトの周りに一重引用符を持つJSON配列をjavascriptで解析するにはどうすればよいですか?

{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"} 
{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"} 
{"upSpeed": 13.890492898595365, "downSpeed": 87.35392034236816, "time": "2016-12-12T21:37:52.174878"} 
{"upSpeed": 13.69741910903317, "downSpeed": 88.08812682966898, "time": "2016-12-12T21:41:04.688231"} 
... 

:私は、JSONオブジェクトのリストであるテキストファイルを持っており、それらが線で区切られ、このように壊れます各行はarrayになり、arrayというJSON配列が作成されます。しかし、問題は、元のテキストファイルをdata.split("\n")で分割したときに、結果として得られたオブジェクトをいずれかの側に一重引用符(')で囲んでいるため、無効なJSONが発生します。だから、それはこのように見える終わる:

だから、
[ '{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"}', 
    '{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"}', 
    '{"upSpeed": 13.890492898595365, "downSpeed": 87.35392034236816, "time": "2016-12-12T21:37:52.174878"}', 
    '{"upSpeed": 13.69741910903317, "downSpeed": 88.08812682966898, "time": "2016-12-12T21:41:04.688231"}' 
...] 

、その結果は実際のjavascriptオブジェクトであるに追加されているから、単一引用符を避けるためにとにかくはありますか?私はforループを作成し、配列内の各要素をループし、一重引用符を何も("")に置き換えるためにarray[i] = array[i].replace(/'/g, "");を実行しようとしましたが、単純にうまく機能せず、上記と同じ正確な結果を返します。何か案は?

+0

'JSON.parse( "["。+ data.split( "\ n")を ''(参加)+ "]")' – Daniel

+0

@Daniel: – rakeshdas

答えて

5

"一重引用符付きのJSON"はありません。 JSON文字列のリストがあります。一重引用符は、コンソールにそれを書き込む単なるノードの方法です。

それぞれを個別に解析するだけです。

var items = data.split(/\n/).map(JSON.parse); 

推奨読書、私はあなたが物事を混合している疑いがあるので:ベンAlmanのブログ - There's no such thing as a "JSON Object"を。削除var jsonItem = JSON.parse(array[i]);

+0

これは、 'SyntaxError:JSON入力の予期しない終了 'を返します。 – rakeshdas

+2

ですか?あなたが提供したサンプルのために働きます。 – Tomalak

+1

ファイルにはおそらく最後に改行があるので、 '.split(/ \ n /)'は配列の最後の要素として空の文字列を残します。これは最後の 'JSON.parse'に失敗します。 '.trim()'は次のように修正する必要があります: 'var items = data.trim()。split(/ \ n /)。map(JSON.parse);' –

1

はあなたのような何かを試してみました文字列を二重引用符で囲みます。
関連する問題