php - 将类 stdClass 的对象转换为 JSON 对象

标签 php javascript json object converter

这是我的 php 文件中的内容:

$session = $m->session;

$session 现在是:

object(stdClass)[31]
  public 'id' => string '21112' (length=5)
  public 'external_id' => string '' (length=0)
  public 'sessiongroupid' => string '1843' (length=4)
  public 'eventid' => string '5588' (length=4)
  public 'order' => string '0' (length=1)
  public 'name' => string 'Ferdau Conference' (length=17)
  public 'description' => string 'Ferdau Conference' (length=17)
  public 'starttime' => string '2013-04-18 18:00:00' (length=19)
  public 'endtime' => string '2013-04-18 18:04:00' (length=19)
  public 'speaker' => string '' (length=0)
  public 'location' => string 'Waregem' (length=7)
  public 'mapid' => string '0' (length=1)
  public 'xpos' => string '0.000000' (length=8)
  public 'ypos' => string '0.000000' (length=8)
  public 'maptype' => string 'plan' (length=4)
  public 'imageurl' => string '' (length=0)
  public 'presentation' => string '' (length=0)
  public 'organizer' => string '0' (length=1)
  public 'twitter' => string '' (length=0)
  public 'allowAddToFavorites' => string '0' (length=1)
  public 'allowAddToAgenda' => string '0' (length=1)
  public 'votes' => string '0' (length=1)
  public 'url' => string 'http://ferdau.be' (length=16)
  public 'venueid' => string '0' (length=1)

我想将所有信息发送到我的 javascript 文件中名为 save 的函数。像这样:

echo '<a onclick="save('.$session.')" style="cursor:pointer;" class="metacell">
                        <img src="'.buildUri("images/icons/favorite.png").'" width="16" />
                        <span>Add to favorites</span>
                    </a>';

当我尝试这个时,我总是得到一个错误,只能发送一个字符串。如何将此对象转换为可以发送到我的 javascript 函数的对象?

我试过这个没有结果:$data = json_encode($session);

当我执行 $data = json_encode((array)$session)

我明白了:

<a class="metacell" style="cursor:pointer;" ferdau.be","venueid":"0"})"="" \="" 18:04:00","speaker":"","location":"waregem","mapid":"0","xpos":"0.000000","ypos":"0.000000","maptype":"plan","imageurl":"","presentation":"","organizer":"0","twitter":"","allowaddtofavorites":"0","allowaddtoagenda":"0","votes":"0","url":"http:\="" 18:00:00","endtime":"2013-04-18="" conference","starttime":"2013-04-18="" conference","description":"ferdau="" id":"21112","external_id":"","sessiongroupid":"1843","eventid":"5588","order":"0","name":"ferdau="" onclick="save({">

最佳答案

$data = json_encode((array)$session); 是正确的方法。

我猜你显示的 html 就是你在 firebug/chrome 开发工具/IE 开发工具中看到的。这就是浏览器尝试呈现它之后的样子。尝试查看原始源以查看输出实际是什么样子。此时您的问题是由 json_encode 中的双引号引起的,导致浏览器引擎认为 onclick 属性在 $data< 的值结束之前关闭.

您需要在 HTML 中混合使用转义双引号和/或使用单引号。我将从单引号开始,因为这样会更简单。但是您还必须确保 $data 中的所有值都不包含未转义的单引号(因为那样会导致同样的问题)。

关于php - 将类 stdClass 的对象转换为 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16062824/

相关文章:

php - 多个提交按钮

php - MySQL如何通过JOIN抓取更多信息?

c# - 如何创建一个 ActionController 以在运行时和使用 ajax 工作

java - Hibernate + Json + 字符串数组

php - 操作数据的最佳实践

php - 乔姆拉!如何使用 JInputJson

php - 如何有效地覆盖 Laravel 生成的身份验证路由?

Javascript 获取 ID

javascript - Ajax 发布响应返回空对象

javascript - 如何正确设置组件的状态而不在每次重新渲染时都将其删除?