【问题标题】:Parsing JSON objects to post解析 JSON 对象以发布
【发布时间】:2015-05-14 03:13:36
【问题描述】:

我正在学习构建一个简单的 API,我有以下代码创建以下 json:

代码:

   $sql = "SELECT * FROM posts WHERE `user_id` = '$user_id' AND post_date > CURDATE() - INTERVAL 2 YEAR ORDER BY post_date DESC ";
                $result = $dbc->query($sql);

                $rows = array();

                while ($row = mysqli_fetch_array($result))
                {
                    $rows["posts"][$row['post_date']] = $row['post_content'];
                }

                echo json_encode($rows);

JSON 创建:

{"posts":{"2015-03-03":"33","2014-03-03":"33 33"}}

如何解析这个?我知道下面的代码是一个好的开始,但还没有成功:

$.ajax({
    url : "http://localhost:8888/290_project/api_write.php",
    dataType: 'json',
    type: 'get',
    cache: false,
    success : function(data){

        }
});

也许我应该在这个 w3 学校的例子中做一些类似的事情?

var text = '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}';

obj = JSON.parse(text);
document.getElementById("demo").innerHTML =
obj.employees[1].firstName + " " + obj.employees[1].lastName;

虽然到目前为止我还没有运气,但我知道我已经很接近了!

【问题讨论】:

    标签: javascript php mysql json api


    【解决方案1】:

    如果你使用它,你实际上甚至不需要解析它

    $.getJSON('http://localhost:8888/290_project/api_write.php', function(alreadyParsedJsonData) {
      // do stuff
    });
    

    【讨论】:

      【解决方案2】:

      为了有一个更清晰的交互界面,您可以考虑更改脚本以更易于使用的形式返回数据:

      while ($row = mysqli_fetch_array($result))
      {
          $post = array();
          $post['date'] = $row['post_date'];
          $post['content'] = $row['post_content'];
      
          $rows["posts"][] = $post;
      }
      

      在您的成功函数中,您可以访问作为 javascript 对象的数据

      success : function(data){
        alert(data.posts[0].date);
        alert(data.posts[0].content);
      }
      

      您可以在此处以任何您喜欢的方式操作这些数据,而无需对其进行解析。

      【讨论】:

      • 这给了我 [object Object],如果我运行:alert(data.posts[0]);我预计“2015-03-03”但未定义。我将如何从那里操纵以获得我想要的东西?这就是我不断遇到障碍的地方。
      • 'posts' 不是数组,因此 posts[0] 将返回未定义。也许您实际上希望您的 PHP 脚本返回一个 JSON 数组作为帖子的值:{"posts":[{"date" : "2015-03-03", "post_content" : "33"},{"date" : "2014-03-03", "post_content" : "33 33"}]}。然后您可以访问每个帖子,例如data.posts[0].date 等。
      • 所以我需要重组: $rows["posts"][$row['post_date']] = $row['post_content']; ?
      • $rows["posts"]["date"][$row['post_date']] = $row['post_content'];这似乎是正确的方向,但我没有得到我需要的东西。
      • 非常感谢!我已经为此工作了几天,学到了很多东西!
      【解决方案3】:

      我认为$.parseJSON 是您的解决方案。您可以在成功事件中这样做:

      $.ajax({
      url : "http://localhost:8888/290_project/api_write.php",
      dataType: 'json',
      type: 'get',
      cache: false,
      success : function(data){
            var data = $.parseJSON(data);
            console.log(data);
      
          }
      });
      

      【讨论】:

      • 似乎它应该可以工作,但我得到 Uncaught SyntaxError: Unexpected token o
      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 2011-09-23
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多