【问题标题】:json_decode on retrieved json string from mysql does not work从 mysql 检索到的 json 字符串上的 json_decode 不起作用
【发布时间】:2009-10-28 18:14:43
【问题描述】:

我有一个字符串 json,它提供以下 var 转储:

"[[{"TransactionID":"00416","OrderID":"000926","TransactionOrderItemID":"001123","LastUpdate":"2009-10-28 13:03:31","CustomerID":"184","Company_name":"Test123","Invoiced":"0","SubItemsCount":"2","ProductID":"1","ProductTypesID":"1","ProductTypeName":"Phone","ProductName":"Phone Line (Home)","IncludePST":"1","BillType":"Monthly","BillingCycle":"Monthly","Status":"Active","CreationDate":"2009-10-28","ActivationStartDate":"2009-10-28","NextNotificationDate":"2009-10-27","OverWritePrice":"-1","PriceEconomic":"26.00","BasePrice":"26.0000","ProRate":"Yes","InvoicePrice":"3.35","ServicePeriod":" Pro-Rate: Oct-28-2009 - Oct-31-2009","EndDate":"2009-10-31"}]]"

当我尝试解码为:

json_decode( $json, true);

结果只是空。 $json 来自数据库。
请注意,我只显示完整数据的一个子集。 问题是,这是来自 db 的变量。如果双引号是问题,如何转换它?

【问题讨论】:

  • 我认为问题出在你省略的部分
  • 公平的建议。但是当我得到这个 var 转储并放入一个字符串时,它会按预期解码。
  • 那个字符串解码得很好,所以我同意 Greg 的观点。问题出在您没有在此处发布的部分。
  • 字符串如何存储到 $json 中?我用单引号而不是双引号括起来的字符串进行了尝试,并且 json_decode() 工作正常。
  • 你说得对,吉姆。如果它用单引号括起来,它工作正常。但问题是如何自动执行此操作?

标签: php mysql json


【解决方案1】:

您可以致电json_last_error() 以获取有关问题所在的更多信息。

例如这样:

json_decode($string);

switch(json_last_error())
{
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
}

【讨论】:

    【解决方案2】:

    这可能是 UTF-8 字符的问题。 json_decode 手册页suggest that some conversion issues 上的很多帖子都需要处理。

    尝试使用json_decode(utf8_encode($json));

    【讨论】:

    • 你怎么知道字符串是 ISO-8859-1 编码的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2016-11-19
    • 1970-01-01
    • 2022-01-09
    • 2012-10-13
    • 2012-12-15
    相关资源
    最近更新 更多