1

JSONを返す小さなプログラムがあり、それを配列にプッシュする前に問い合わせています。

データの例は次のとおりです。

id = 1 | owner = Vina San Pedro | brandName=1865チリワイン|variantName=1865チリワイン|quality= Standard |minorRegionName=北欧諸国|vol02= 0 | vol07 = 0 | vol08 = 4.25 | vol09 = 4.25 | vol10 = 0 ||

上記の文字列を繰り返して値を配列にプッシュすることはできますが、「Vol02」、「Vol07」などの項目が次のようにマークされる可能性があることを考慮して、JSONのフィールド名に基づいて配列内のキーに「名前を付ける」にはどうすればよいですか。 「val02」、「val07」、または「minorRegionName」は、「majorRegionName」で指定できる場合があります。

編集

  var finalSplit = brandDataRow.split('|');
                                $.each(finalSplit, function (x, y) {
                                    var v = y.split('=');
                                    $.each(v, function (m, n) {
                                        formattedBrandData.push({ m: m }, { n: n });
                                    });
                                });

上記の例では、| 区切り文字列に「Owner=?????? | Value = ???????? | Brand=???????」が含まれています 次に、これを配列にプッシュするときに、キーを「所有者」、「値」、「ブランド」にします。

しかし、データを返すまでキー名がわからないので、| 区切り文字列は「Owner=?????? | Line = ??????? | Region=??????」のようになります。

4

3 に答える 3

1

これを試して:

var data = "id=1|owner=Vina San Pedro|brandName=1865 Chilean Wine|variantName=1865 Chilean Wine|quality=Standard|minorRegionName=Nordic Countries|vol02=0|vol07=0|vol08=4.25|vol09=4.25|vol10=0|";

var keyVal = data.split("|");
var res = {};
for(var i =0; i< keyVal.length; i++) {
    var tmp = keyVal[i].split("=")
    res[tmp[0]] = tmp[1];
}
console.log(res);

はい、オブジェクトを返しますが、配列には数値インデックスのみを含めることができます。また、ほとんどの場合、配列と同じ方法でオブジェクトを操作できます。その上、そのような単純なタスクに$.eachを使用する理由はありません。実行する追加のコード。

JSFiddleデモ-コンソール出力を参照

于 2012-09-25T11:03:33.120 に答える
1

まず、配列ではなくオブジェクトを探します。JS配列は実際にはドラッグ中のオブジェクトですが、それは重要ではありません。JSには連想配列はなく、オブジェクトのみがあります。しかし、あなたの質問に答えるには、IMO、文字列をオブジェクトに変換する最も簡単な(そしておそらく最も速い)方法は、それを有効なJSONに変換することです。

var str = 'id=1|owner=Vina San Pedro|brandName=1865 Chilean Wine|variantName=1865 Chilean Wine|quality=Standard|minorRegionName=Nordic Countries|vol02=0|vol07=0|vol08=4.25|vol09=4.25|vol10=0|';
var obj = JSON.parse('{"'+str.substring(0,str.length-1).replace(/(=|\|)/g,function(s1,s2)
{
    return '"'+(s2 === '=' ? ':' : ',')+'"';
})+'"}');

分解すると、これは高密度バージョンです。

str.substring(0,str.length-1);//leave out trailing pipe (|)
//if the pipe is not always there:
str  = str.substr(-1) === '|' ? str.substring(0,str.length-1) : str;

=次に、すべてを置き換えて|

str = str.replace(/(=|\|)/g,function(s1,s2)
{//s1 will be the entire matched substring, s2 the first group, not required in this case, but just so you know
    return '"'+(s2 === '=' ? ':' : ',') + '"';
});//pipes become comma's, = becomes colon

もうすぐです。返される文字列はになりますid":"1","owner":"Vina San Pedro","brandName":"1865 Chilean Wine","variantName":"1865 Chilean Wine","quality":"Standard","minorRegionName":"Nordic Countries","vol02":"0","vol07":"0","vol08":"4.25","vol09":"4.25","vol10":"0。ご覧のとおり、追加する必要があるのは、開始と終了のカーリー、および文字列の最初と最後の二重引用符だけで、最終的に有効なJSONになります。

var obj = JSON.parse('{"'+str+'"}');//returns object
//is the same as:
obj = { brandName: "1865 Chilean Wine",
        id: "1",
        minorRegionName: "Nordic Countries",
        owner: "Vina San Pedro",
        quality: "Standard",
        variantName: "1865 Chilean Wine",
        vol02: "0",
        vol07: "0",
        vol08: "4.25",
        vol09: "4.25",
        vol10: "0"};

あれから:

console.log(obj.id);//logs 1
console.log(obj.owner);//logs 'Vina San Pedro'
console.log(obj['brandName']);//string access: logs "1865 Chilean Wine"
//etc...

このコードはテストされ、機能しています

于 2012-09-25T11:27:05.650 に答える
0

文字列を使用してキーに名前を付けることができます。例えば。

var sample = new Array();
sample["bob"] = 123;
sample.bob; //returns 123

それが役に立てば幸い。

于 2012-09-25T10:51:46.890 に答える