使用jquery操作JSON数组

时间:2012-06-02 15:47:47

标签: php javascript jquery json

我在PHP中打印<ul>数组$_SESSION['words']

    // PHP print new words as links
    echo '<ul id="wordlist">';
    foreach($_SESSION['words'] as $word => $description) {
        echo '<li id="wordlist"><a href="#">' . $word . '</a></li>';
    }

数组很简单 - 单词存储为键,单词的描述将是值,例如 array(5) { ["word1"]=> int(1) ["word2"]=> int(2) ["word3"]=> int(3) ["word4"]=> int(4) ["word5"]=> int(5) }

我打算通过选择$word并添加$description并将其添加到数组中来操作数组中的项目,所以我想我将使用jQuery来完成它。

我的问题是:如果我从这个PHP数组创建一个JSON数组,我可以用同样的方式打印它并操作它吗?我用$myJSON = json_encode($_SESSION['words']);编码了它,但我已经卡住了试图从JSON打印出键/值!感谢...

4 个答案:

答案 0 :(得分:2)

您可以使用$.parseJSON

var json = $.parseJSON('your json');
alert(json.word1);
alert(json.word2);

如果您的JSON数据可通过网址获得,则可以使用$.getJSON

答案 1 :(得分:1)

  1. 如果不习惯$ .each方法,也可以尝试旧的数组循环:

    $.ajax({ 
      url: '',
      dataType: 'json', 
      success: function(arrayData) { 
        var i,max=arrayData.length; 
        for(i=0;i<max;i++){ 
           var rowItem = arrayData[i];
           try{
           console.log(rowItem.attr1);
           }catch(ex){
           alert(ex);///in case data is not complete
           }
        }); 
      } 
    });
    
  2. 如果您已经拥有JSON字符串,请说strJson ='[{attr1:“hello”},{attr1:“world”}]';

    var tmp = 'var data = '+strJson; 
    ///so you got : var data = [{attr1:"hello"},{attr1:"world"}]
    eval(tmp);/// execute the above line
    alert(data.length + "first item:"+data[0].attr1);
    

答案 2 :(得分:1)

您的描述向我表明您没有以任何方式使用JSON,除了使用PHP的JSON编码功能。听起来您正在将PHP关联数组编码为JSON字符串,然后将该字符串写入HTML输出。如果是这种情况,那么您的JSON实际上是一个JavaScript对象。

所以让我们假设你得到的标记是这样的:

<script>
  // Using a global here, which is not good,
  // but this is an example.
  var myWordList = {"word1":1,"word2":2,"word3":3};
</script>
<ul id="wordlist">
  <li id="word1">1</li>
  <li id="word2">2</li>
  <li id="word3">3</li>
</ul>

请注意,我的id属性值是唯一的。您多次使用相同的id属性值;这是无效的标记。此外,我将每个列表元素中的标记保留为此示例(仅文本)。

因此,鉴于此标记,我们可以编写以下JavaScript:

<script>
// Update our wordlist object with some descriptions
myWordList.word1 = {
  "value": myWordList.word1,
  "description": "This is word 1."
};

myWordList.word2 = {
  "value": myWordList.word2,
  "description": "This is word 2."
};

myWordList.word3 = {
  "value": myWordList.word3,
  "description": "This is word 3."
};

// Now lets update the unordered list with jQuery
for (var i = 1; i < 4; i += 1) {
  $('#word' + i).html(myWordList['word' + i].description);
}
</script>

在这个JavaScript中,我首先通过为每个值分配一个新对象来更新myWordList值。这些新对象具有两个属性:分配了旧value值的myWordList.word#属性和描述该单词的新description属性。接下来,我通过将单词值替换为单词描述来更新无序列表。

修改

如果要遍历对象中的属性,可以执行以下操作:

for (var key in myWordList) {
  if (myWordList.hasOwnProperty(key)) {
    console.dir(myWordList[key]);
  }
}

答案 3 :(得分:0)

您需要通过AJAX和

获取JSON
$.ajax({
  url: '',
  dataType: 'json',
  success: function(response) {
    $.each(response, function(key, val) {
       console.log(key); // word1, word2, word3...
       console.log(val); // 1, 2, 3...
       ....
    });
  }
});