0

次のようなjsonが与えられた場合:

{ "rss": {
   "page": 1,
   "results": [{
      "type": "text",
      "$": 10
   }],
   "text": [{
      "content": "Lorem ipsum dolor sit amet.",
      "author": {
         "name": "Cesar",
         "email": "cesar@evoria.com"
      },
   },
   {
      "content": "Tema Tis rolod muspi merol.",
      "author": {
         "name": "Cleopatre",
         "email": "cleopatre@pyramid.com"
      },
   }]
}

JavaScript では、次のように値を取得できます。

var json = JSON.parse(datajson);
$.each(json.text, function(key, val) {
    // this one is ok
    var content = val['content'];
    // this one does not work
    var authorname = val['author.name'];
});

これは、文字列形式の属性名を指定して、たとえば複雑なオブジェクトの値を取得する方法json.text[0].author.nameですか?

編集 必要な属性を次のような別のオブジェクトに保存したいと思います:

[
    { dt: "Text content", dd: "content" },
    { dt: "Author name", dd: "author.name"}
]
4

3 に答える 3

3

「インデックス」.を「セグメント」で分割してループし、反復ごとにレベルを下げることができます。

var obj = {
   author : {
      name : "AuthorName"
   }
}

function get_deep_index(obj, index) {   
   var segments = index.split('.')
   var segments_len = segments.length
   var currently_at = obj
   for(var idx = 0; idx < segments_len; idx++) {
      currently_at = currently_at[segments[idx]]
   }
   return currently_at
}

console.log(get_deep_index(obj, 'author.name'))
于 2012-07-23T15:12:17.493 に答える
2

以下は問題を解決するはずです。

var authorname = val['author']['name'];

オブジェクト自体を次のように保存することもできます。

var author = val['author'];

そして後で、そこから属性にインデックスを付けることができます。

console.log(author.name, author.email)
于 2012-07-23T14:51:16.797 に答える
-2

eval 関数を使用して、コメントに良いヒントを与えてください。私はこの種のコードで必要なものを解決します:

var json = JSON.parse(myjsonasastring);

var descriptiontobeadded = [
    { dt: "Text content", dd: "content" },
    { dt: "Author name", dd: "author.name" }
];

$.each(descriptiontobeadded, function(key, val) {
    var dt = '<dt>' + val.dt + '</dt>';
    description.append(dt);
    var dl = '<dd>' + eval('json.' + val.dd) + '</dd>';
    description.append(dl);
});
于 2012-07-23T15:02:44.820 に答える