【问题标题】:PHP converting JSON string into Object or ArrayPHP将JSON字符串转换为对象或数组
【发布时间】:2015-10-18 08:54:59
【问题描述】:

我知道如果我在 google 上搜索这个,你会得到很多回击,而我在过去 2 天里一直试图弄清楚发生了什么,但没有成功。

所以,我正在使用 Wordpress,但不确定这与我的问题是否相关,并且我在存储中有一个有效的 JSON 字符串,我需要将它放入 PHP 中,然后放入一个对象中。

JSON 字符串是我转换的 PHP 中的一个对象,因为我在 sessionStorage 中需要它,所以这是我在 PHP 中转换它的方式:

$encodedTime = json_encode($time);
$encodedTime = str_replace("'", "", $encodedTime);

然后将其加载到一个元素中:

<a class="button" href="/?page_id=714" name="viewButton" rel='<?php echo $encodedTime ?>'>View</a>

这是现在存储在浏览器 sessionStorage 中的对象:

{"uuid":"108-417f-b5e6-970baec37","low":2929,"run":50793,"contact":"a07-e4b0-4977-ad10-af7aecf4ef80","completed":true,"values":[{"category":{"base":"Great","eng":"Great"},"node":"f85ed85-495e-8eaf-1e6cfdbadf97","time":"2015-10-12T11:28:13.371Z","text":"Great thanks","rule_value":"Great","value":"Great","label":"Response 1"}],"steps":[{"node":"83e332e0-a456-449f-a4f6-cee688f9395b","arrived_on":"2015-10-12T11:27:43.866Z","left_on":"2015-10-12T11:27:44.052Z","text":"Hello! Good Morning  This morning?","type":"A","value":"None"},{"node":"f85ed8a8-e745-495e-8eaf-1e6cfdbadf97","arrived_on":"2015-10-12T11:27:44.052Z","left_on":"2015-10-12T11:28:13.371Z","text":"Great thanks","type":"R","value":"Great"},{"node":"424912da-e680-432d-877c-307117366f98","arrived_on":"2015-10-12T11:28:13.374Z","left_on":"2015-10-12T11:28:13.477Z","text":"Thats great to hear!, Wishing you a good day","type":"A","value":"None"}],"created_on":"2015-10-12T11:27:43.721Z","modified_on":"2015-10-12T11:28:13.482Z","expires_on":null,"expired_on":null,"runtime":"12 - 10 @ 11 hour"}

这已通过 JSONLint 验证。

这是 PHP 代码:

$time = "<script>document.write(time)</script>";

如果我现在print_r($time) 我得到相同的打印,一个有效的 JSON 字符串。太好了!

根据我阅读的内容,PHP 有 json_decode 来满足这样的要求,但它不起作用,但它确实给了我一个空白

$time = json_decode("<script>document.write(time)</script>", true); // PHP Code
print_r($time);

如果我尝试json_encode,它会给我带来有趣的角色。

如果我尝试使用 :

使其成为对象
$time = (object) json_decode("<script>document.write(time)</script>", true);

它给了我:

stdClass 对象 ( )

$time = (object) "document.write(time)";

stdClass 对象 ( [scalar] => {"uuid":"1788-417f-b5e6-970bab44ec37","low":2629,"run":5046793,"contact":"a0eb0-4977-ad10-af7aecf4ef80 ","已完成":true,"values":[{"category":{"base":"Great","eng":"Great"},"node":"f85ed85-495e-8eaf-1e6cfdbadf97", "time":"2015-10-12T11:28:13.371Z","text":"非常感谢","rule_value":"Great","value":"Great","label":"Response 1" }],"steps":[{"node":"83e332e0-a45-a4f6-cee688f9395b","arrived_on":"2015-10-12T11:27:43.866Z","left_on":"2015-10-12T11 :27:44.052Z","text":"你好!早上好?","type":"A","value":"None"},{"node":"f85ed8a8-5e-8eaf-1e6cfdbadf97", "arrived_on":"2015-10-12T11:27:44.052Z","left_on":"2015-10-12T11:28:13.371Z","text":"非常感谢","type":"R" ,"值":"大"},{"节点":"424912da-e680-432d-877c-307117366f98","arrived_on":"2015-10-12T11:28:13.374Z","left_on":"2015 -10-12T11:28:13.477Z","text":"很高兴听到这个消息!祝你有美好的一天","type":"A","value":"None"}],"created_on" :"2015-10-12T11:27:43.721Z","modified_on":"2015-10-12T11:28:13.482Z","exp ires_on":null,"expired_on":null,"runtime":"12 - 10 @ 11 小时"})

所以我很茫然,至于为什么它不起作用。我可以选择使用 Javascript 并使用这些信息,但我确实需要在 PHP 中使用它,因为还有更多工作要做。

谁能帮我指出哪里出错了,为什么出错了?

【问题讨论】:

  • php 在 javascript 之前执行,因此 php 代码看不到来自 javascript document.write 的输出
  • @RamRaider 我该如何把握好时机?
  • 通过 ajax 将 JSON 对象发送到 php 脚本
  • 所以可以使用 HTML 链接到一个页面,同时 Javascript 中的 Ajax 也可以链接到它所链接的同一页面?
  • 除此之外:到底为什么那行代码:$encodedTime = str_replace("'", "", $encodedTime);?您修改了您的 json 字符串,使其不再是有效的 json!

标签: javascript php json object


【解决方案1】:

您无法使用 PHP 代码获取 javascript 变量值。它们是不同的东西。如果您想了解更多,我建议您阅读this question

那么……怎么办?

如果您想在后端使用该数据,您需要创建一个 AJAX 请求,正如 RambRaider 所说。如果你在前端需要这个,你可以简单地使用JSON.parse解析json数据。

【讨论】:

  • 谢谢拉戈。正如我所说,我不能使用 javascript,因为我还有很多事情要做。这只是五个中的一个,也是第一个,它的不同部分用于其他功能。我确实设法 json.parse 它,它是成功的:)
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 2020-12-19
  • 2012-05-08
  • 2013-07-14
相关资源
最近更新 更多