私はJavascriptを使い慣れていないので、私が書いた関数に問題があります。私はarray.reduce()を使って仕事をしていますが、Windowsでは失敗しています(Mac上でのテストはうまくいきます)。Node.js - Javascript - ネストされたオブジェクトにファイルを解析する
私が持っているファイルは、このようにフォーマットされています。私は構造を持っていると思い
ford.car.focus.transmission=standard
ford.car.focus.engine=four-cylinder
ford.car.focus.fuel=gas
ford.car.taurus.transmission=automatic
ford.car.taurus.engine=V-8
ford.car.taurus.fuel=diesel
purchased=Ford Taurus
次のようになります。
{ ford:
{ car:
{ focus:
{
transmission: 'standard',
engine: 'four-cylinder',
fuel: 'gas'
}
}
{ taurus:
{
transmission: 'automatic',
engine: 'V-8',
fuel: 'diesel'
}
}
}
purchased: 'Ford Taurus'
}
私は上の分割、配列内のファイルの行を格納しています'\ n'私はこのように私のグローバルオブジェクトを渡して、ループ内で呼び出されることになるメソッドを記述しようとしている:
var hash = {};
var array = fileData.toString().split("\n");
for (i in array) {
var tmp = array[i].split("=");
createNestedObjects(tmp[0], tmp[1], hash);
}
私の現在の機能は次のようになります。
function create_nested_object(path, value, obj) {
var keys = path.split('.');
keys.reduce(function(o, k) {
if (k == keys[keys.length-1]) {
return o[k] = value;
} else if (o[k]) {
return o[k];
} else {
return o[k] = {};
}
}, obj);
}
私はこれをオンにしたいと思いますforループに入れます。
function create_nested_object(path, value, obj) {
var keys = path.split('.');
for (var i = 0; i < keys.length; i++) {
if (keys[i] == keys[keys.length-1]) {
obj[keys[i]] = value;
} else if (obj[keys[i]] == keys[i]) {
obj;
} else {
obj = obj[keys[i]] = {};
}
}
}
しかし、それは唯一の各巣内の最後の項目を返します:
{
"ford": {
"car": {
"taurus": {
"fuel": "diesel"
}
}
},
"purchased": "Ford Taurus"
}
私は」知っている私は、この(私はarray.reduce変換()のコードを試してみました)ように見える新しいコードを持っています何か不足していますが、何が間違っているのか分かりません。どんな助けもありがとう! @Martyが示唆されているようにする必要があり、、
var array = fileData.toString().split("\n");
そして:
関連質問:OPコードで を:Javascript - Parsing INI file into nested associative array
JSONのような既存の解析メソッドを持つ形式でデータを保存しないのはなぜですか?独自のデータ形式を作成する必要はありません。いずれにせよ、それはあなたが分割している行の終わりとは何かを持っている可能性があります。別のOSでは違っています(私はそのようなものの専門家とは遠く離れています)。 – Marty
@Martyは正しいです。ウィンドウでは、 "\ r \ n"を使用する必要があります。 –
レガシーアプリケーションにフックするので、このファイル形式を使用する必要があります。 – jbmoon