【问题标题】:How to parse json string inside loop?如何解析循环内的json字符串?
【发布时间】:2016-02-21 16:47:13
【问题描述】:

我想在循环中解析 json 字符串。我尝试使用以下代码,但解析的数据永远不会在循环内打印出来!谁能告诉我我在这里做错了什么?提前致谢。

$code2 示例数据:

{ p '5123': {
            p 'tmp': p '1', p 'name': p 'mango', p 'abc': p 'abcd4 http://mysite/items/1234', p 'number': p '1123', p 'itemCategory_title': p 'fruits', p 'logo': p '2123.png', p 'itemCategory_id': p '90'
        }, p '700': {
            p 'tmp': p '0', p 'name': p 'cherry', p 'abc': p 'abcd4 http://mysite/items/1235', p 'number': p '1124', p 'itemCategory_title': p 'fruits', p 'logo': p '2124.png', p 'itemCategory_id': p '91'
        } }

$clean_str 数据:

{ '5123': {
            'tmp': '1', 'name': 'mango', 'abc': 'abcd4 http://mysite/items/1234', 'number': '1123', 'itemCategory_title': 'fruits', 'logo': '2123.png', 'itemCategory_id': '90'
        }, '700': {
            'tmp': '0', 'name': 'cherry', 'abc': 'abcd4 http://mysite/items/1235', 'number': '1124', 'itemCategory_title': 'fruits', 'logo': '2124.png', 'itemCategory_id': '91'
        } }

php代码:

<?
$code2 = stripslashes($_POST['outputtext']);
$clean_str = str_replace("p '","'",$code2);

$data = json_decode($clean_str);

foreach( $data as $item ) {
  echo $item['tmp'];
  echo $item['name'];
  echo $item['abc'];
  echo $item['number'];
  echo $item['itemCategory_title'];
  echo $item['log'];
  echo $item['itemCategory_id'];    

?>
<a href="./process.php?tmp=<?php  echo $item['tmp'] ; ?>&name=<?php  echo $item['name']; ?>&abc=<?php  echo $item['abc'] ; ?>&itemCategory_title=<?php  echo $item['itemCategory_title'] ; ?>&log=<?php  echo $item['log'] ; ?>&itemCategory_id=<?php  echo $item['itemCategory_id'] ; ?>"><?php  echo $item['itemCategory_title'] ; ?>test </a> <br />
<?

}

?>

【问题讨论】:

  • 使用 json_decode 获取数组添加第二个参数 TRUE ($string, TRUE).. 否则你将捕获对象而不是数组..
  • 感谢您的回复。我将其更改为 $data = json_decode($clean_str, true);但仍然没有解析循环内的json字符串!

标签: php json parsing


【解决方案1】:

要获得数组形式的结果,您应该:

$data = json_decode($clean_str, true);

JSON 使用双引号“不是单引号”

<?php

$code2 = stripslashes($_POST['outputtext']);

$clean_str = str_replace("p '","'",$code2);
$clean_str = str_replace('\'', '"', $clean_str);

$data = json_decode($clean_str, true);

foreach( $data as $item ) {
  echo $item['tmp'];
  echo $item['name'];
  echo $item['abc'];
  echo $item['number'];
  echo $item['itemCategory_title'];
  echo $item['log'];
  echo $item['itemCategory_id'];    

?>
<a href="./process.php?tmp=<?php  echo $item['tmp'] ; ?>&name=<?php  echo $item['name']; ?>&abc=<?php  echo $item['abc'] ; ?>&itemCategory_title=<?php  echo $item['itemCategory_title'] ; ?>&log=<?php  echo $item['log'] ; ?>&itemCategory_id=<?php  echo $item['itemCategory_id'] ; ?>"><?php  echo $item['itemCategory_title'] ; ?>test </a> <br />
<?

}

?>

【讨论】:

  • 感谢您的回复。我试过了,但仍然没有解析 json 字符串!你能告诉我 json 字符串的格式是否正确吗?
  • Json 使用双引号 " 而不是单引号 ' :)
  • @faressoft 数据来自 api 响应,所以我无法控制如何构建它!那么如何将所有单引号更改回双引号?我试过了,但没有成功!$clean_str = str_replace("'",""",$code2);
  • $clean_str = str_replace('\'', '"', $clean_str);
  • 感谢您的解决方案有效,并且这个解决了问题: $clean_str = str_replace("'","\"",$code2); $clean_str = str_replace("p ","", $clean_str);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2017-10-01
  • 1970-01-01
相关资源
最近更新 更多