2017-11-18 8 views
-2

私はselect2ドロップダウンに移入できるように配列に分割する必要があるjsonファイルを持っています。複数の場所でjavascriptで分割する方法

ここでは、JSONの形式です:

[{ 
    "entry_id": "MY_ID", 
    "title": "MY TITLE", 
    "url": "MY URL", 
    "count": "MY COUNT" 
}, 

{ 
    "entry_id": "MY_ID 2", 
    "title": "MY TITLE 2", 
    "url": "MY URL 2", 
    "count": "MY COUNT 2" 
}] 

私は(より大きなスクリプトの一部)のjavascriptのこれらの行を使用してきた:

data[i] = data[i].split(",\"title\": "); 
data[i][0] = data[i][0].slice(13, -1); 
data[i][1] = data[i][1].slice(1, -1); 

「MY IDを抽出するために、 "と" MY TITLE "の値がドロップダウンで使用されていますが、これは2つの配列に分割されていることを認識しています。

私は3ヶ所に分割する必要があると思う:私はどのような方法がありますと仮定していない

:ちょうど「タイトル」ではないと:「タイトル」:,「URL」:と「カウント」その分割機能を複数のパターンで機能させることはできますか?

+5

は、なぜあなたはそうではありません 'JSON.parse()' JSONをすると、通常のようにオブジェクトのプロパティにアクセスする: 'data.title'など? – Andy

+2

あなたのフォーマットはJSONではありません。解析するために文字を追加するか、単純なパーサを書くかのどちらかで、そのデータにはかなり簡単なはずです。 –

+0

'コンソール。 "count": "MY COUNT"}。タイトル) ' – mplungjan

答えて

0
var obj = JSON.parse(json); 
obj.entry_id; 

で十分です。

+2

あなたのコードは有効ではありませんJSおよびOPs "オブジェクト"はJSオブジェクトまたはJSONオブジェクトではありません。{} 'obj.entry_id;でラップされていなければ何もしません。 – mplungjan

+0

実際にはJSONオブジェクトです。 – Maluen

+0

申し訳ありませんが、JSONファイル構造を完全に反映するように投稿を編集しました。 –

0

更新

あなたが有効なJSONを持っていないことが明らかになっているので、それは中括弧で追加することなく、以下の私の最初の例を使用しての問題です。

entry_idtitleだけが必要な場合は、非構造化割り当てを使用できます。

var d = `{ 
 
    "entry_id": "MY_ID", 
 
    "title": "MY TITLE", 
 
    "url": "MY URL", 
 
    "count": "MY COUNT" 
 
}`; 
 

 
const {entry_id, title} = JSON.parse(d); 
 
console.log(entry_id, title);


あなたのデータ示すように、カスタム形式ではなく、JSONです。特定のデータを指定すると、中括弧を追加して有効なJSONに変換できます。これにより、データを解析して読み取ることができます。

var d = `"entry_id": "MY_ID", 
 
"title": "MY TITLE", 
 
"url": "MY URL", 
 
"count": "MY COUNT"`; 
 

 
var json = "{" + d + "}"; 
 

 
var parsed = JSON.parse(json); 
 

 
for (const [key, val] of Object.entries(parsed)) { 
 
    console.log(key, val); 
 
}

それとも示すように、そのデータ形式を与え、簡単なパーサを書くのはかなり簡単なはずです。これはあなたに良いスタートを与えるはずです。

var d = `"entry_id": "MY_ID", 
 
"title": "MY TITLE", 
 
"url": "MY URL", 
 
"count": "MY COUNT"`; 
 

 
var parsed = parse(d); 
 

 
for (const [key, val] of parsed) { 
 
    console.log(key, val); 
 
} 
 

 
function parse(d) { 
 
    var res = []; 
 
    var key, val; 
 

 
    while (d.length) { 
 
    [key, d] = parseString(d.trim()); 
 
    d = d.trim(); 
 
    if (d[0] !== ":") { 
 
     throw "Invalid data"; 
 
    } 
 

 
    [val, d] = parseString(d.slice(1).trim()); 
 
    res.push([key, val]); 
 
    d = d.trim(); 
 
    if (d[0] !== ",") { 
 
     break; 
 
    } 
 

 
    d = d.slice(1) 
 
    } 
 
    if (d.length) { 
 
    throw "Invalid data"; 
 
    } 
 
    return res 
 
} 
 

 
function parseString(d) { 
 
    var i = 0; 
 
    if (d[i++] !== '"') { 
 
    throw "Invalid string; expected open quote"; 
 
    } 
 
    while (i < d.length && d[i] !== '"') { 
 
    i++; 
 
    } 
 
    if (d[i++] !== '"') { 
 
    throw "Invalid string; expected close quote"; 
 
    } 
 
    return [d.slice(1, i - 1), d.slice(i)]; 
 
}

0

有効なJSON文字列を作成するためにあなたのJSONデータに中括弧を追加します。 JSON文字列をJSON.parse()に渡してオブジェクトを作成します。 オブジェクトプロパティに名前でアクセスします。

jsonString = '{"entry_id": "MY_ID", "title": "MY TITLE", "url": "MY URL", "count": "MY COUNT" }'; 

myObject = JSON.parse(jsonString); 

entryId = myObject.entry_id; 
title = myObject.title; 

console.log(entryId); 
console.log(title); 

https://jsfiddle.net/g9ko8tk9/

関連する問題