解析 JSON 对象以发布

Posted

技术标签:

【中文标题】解析 JSON 对象以发布【英文标题】:Parsing JSON objects to post 【发布时间】: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;

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

【问题讨论】:

【参考方案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

以上是关于解析 JSON 对象以发布的主要内容,如果未能解决你的问题,请参考以下文章

如何在请求正文中设置对象名称以在 Ios 中解析 json

数据以 JSON 对象的形式传入,如何解析?

在 Swift 3.0 中访问从 iTunes API 解析的 JSON 对象

解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

Swift 将对象解析为 JSON 对象

Android studio解析json对象