【问题标题】:How to parse (and access) array of object如何解析(和访问)对象数组
【发布时间】:2017-05-21 16:51:10
【问题描述】:

我想解析和打印由通过 GET 请求从 PHP 传递给 JavaScript 的对象数组组成的 JSON,我尝试了“标准方式”,但我的代码不起作用(但适用于简单的 JSON)

PHP:

ob_start();
for ($i=0; $i<count($id); $i++){
    $array[]=new Field($id[$i], $en[$i], $it[$i]);
}
print_r($array); // IT WORKS PROPERLY

ob_end_clean();
header('Content-Type: application/json');
echo json_encode($array);

JavaScript:

$.get("../GetFieldsForLanguage.php", function(data, status){
var str = JSON.stringify(data);
console.log(str);
var form = JSON.parse(str);
var count = Object.keys(data).length;
for (var i=0; i<count; i++)
{
   $('#it').append(
      $('<tr />').append(
         $('<th />', {text: form[i].**WHAT**}),
         $('<th />').append(
            $('<input />', { name: form[i]., placeholder: form[i]. type: 'text' })
         )
      )
   )
}

这是一个如何通过 echo 打印 JSON 的示例:

[
 {"ev":"Description","iv":"...","id":"1"},
 {"ev":"Surface","iv":"...","id":"2"},
 {"ev":"Locals","iv":"...","id":"3"}
]

【问题讨论】:

    标签: javascript php arrays json object


    【解决方案1】:

    我认为$.getJSON 就是你所追求的,例如。

    $.getJSON( "../GetFieldsForLanguage.php", function( data ) {
        var items = [];
        var count = data.length;
        $.each( data, function( key, val ) {
            items.push( "<li id='" + key + "'>" + val + "</li>" );
        });
        $( "<ul/>", {
           "class": "my-new-list",
           html: items.join( "" )
        }).appendTo( "body" );
    });
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      观察很少:

      • 为什么JSON.stringify(data) 和JSON.parse(str) 因为data 已经是一个JSON 对象?没有办法再次字符串化和解析。
      • 根据您在 OP 中发布的 JSON,您的回复 data 是 array of objects。那么,为什么是 Object.keys(data) 呢?
      • 应该是 var count = data.length 而不是 var count = Object.keys(data).length,因为数据是 array 而不是 JS object。

      Working Fiddle

      var data = [{"ev":"Description","iv":"...","id":"1"},{"ev":"Surface","iv":"...","id":"2"},{"ev":"Locals","iv":"...","id":"3"}];
      
      var count = data.length;
      for (var i=0; i<count; i++)
      {
      $('#it').append(
         $('<tr />').append(
            $('<th />', {text: data[i].ev}),
            $('<th />').append(
              $('<input />', { name: data[i].ev, placeholder: data[i].iv, type: 'text' })
            )
          )
        )
      }
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <div id="it">
      
      </div>

      【讨论】:

        【解决方案3】:

        如果您的数据始终是array:

        var data = [
            {"ev":"Description","iv":"...","id":"1"},
            {"ev":"Surface"    ,"iv":"...","id":"2"},
            {"ev":"Locals"     ,"iv":"...","id":"3"}
        ];
        
        console.log(data);
        
        data.forEach(function (value) { 
            $('#it').append(
                $('<tr />').append(
                    $('<th />', {text: value.ev}),
                    $('<th />').append(
                        $('<input />', { name: value.id, placeholder: value.iv })
                    )
                )
            )
        });
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <div id="it"></div>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-08
          • 2019-12-01
          • 2019-01-14
          • 2022-11-17
          • 2012-09-22
          • 2021-11-07
          相关资源
          最近更新 更多