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

Posted

技术标签:

【中文标题】将 stdClass 类的对象转换为 JSON 对象【英文标题】:Convert Object of class stdClass to JSON Object 【发布时间】:2013-04-10 09:06:50 【问题描述】:

这是我的 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").'"  />
                        <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) 可能重复。 ***.com/questions/4697656/… 在 PHP >= 5.4.0 中有一个用于将对象序列化为 JSON 的新接口:JsonSerializable 另外,不要忘记 json_encode 使用双引号生成字符串。 【参考方案1】:

$data = json_encode((array)$session); 是正确的选择。

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

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

【讨论】:

然后如何读取我的 javascript 代码中的 json 值? 见json.org/js.html。特别是:To convert a JSON text into an object, you can use the eval() function. eval() invokes the JavaScript compiler. Since JSON is a proper subset of JavaScript, the compiler will correctly parse the text and produce an object structure. The text must be wrapped in parens to avoid tripping on an ambiguity in JavaScript's syntax. var myObject = eval('(' + myJSONtext + ')');

以上是关于将 stdClass 类的对象转换为 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

SQL 错误可捕获的致命错误:stdClass 类的对象无法转换为字符串

报错:使用 maatwebsite 导出到 excel 时,stdClass 类的对象无法转换为字符串

将 stdClass 对象转换/转换为另一个类

PHP------数组和对象相互转化,stdClass Object转array

PHP------数组和对象相互转化,stdClass Object转array

php stdClass 到数组