代码之家  ›  专栏  ›  技术社区  ›  Andrew Hedges

从coldfusion的serializejson方法到php的json解码有问题吗?

  •  5
  • Andrew Hedges  · 技术社区  · 16 年前

    互联网对这件事没有帮助。我们在ColdFusion中使用 serializeJSON 并尝试用php解码 json_decode . 大多数情况下,这样做很好,但在某些情况下, 小精灵 收益率 NULL . 我们已经找到了明显的罪魁祸首,但是 序列化JSON 似乎正在按预期格式化。还有什么问题吗?

    更新:有几个人(明智地)让我发布导致问题的输出。我会的,除了我们刚刚发现结果集是我们所有的数据(列出2300+出租物业的信息,总共565135个ascii字符)!这可能是个问题,尽管我在php文档中没有看到字符串的最大大小。那里的限制因素是什么?猛撞?

    更新二:看起来问题是,我们的一些用户已经复制和粘贴微软Word文本与“智能”报价。那些讨厌的用户…

    4 回复  |  直到 13 年前
        1
  •  2
  •   Ates Goral    16 年前

    您可以尝试使用utf-8操作,并让php知道这一事实。

    我对php的 json_decode 无法解码utf-8json字符串(除了你的卷曲引号之外,还有一些“奇怪”的字符)。我的解决方案是提示PHP,我在UTF-8模式下工作,在HTML页面中插入一个内容类型元标签,它正在向PHP提交。这样,提交数据的内容类型(即json字符串)也将是utf-8:

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    

    之后,php 小精灵 能够正确地解码字符串。

        2
  •  1
  •   Owen Ryan Doherty    16 年前

    你能可靠地复制这个问题吗?如果是这样,你能发布返回空的采样数据吗?我相信你知道,但是为了提供信息,为了那些可能不知道的人, RFC 4627 描述json,通常错误地认为有效的javascript是有效的json。最好将json看作javascript的一个子集。

    针对编辑:

    我建议检查以确保您的信息填充在PHP脚本中(在传递到JSONUL解码之前),并且验证该信息(特别是如果您能够可靠地重现错误)。你可以试试 online validator 为了方便。基于非常有限的信息,听起来可能是超时而没有抓取所有的数据?需要这么大的数据集吗?

        3
  •  1
  •   Community CDub    7 年前

    我有这个确切的问题,结果是因为CordDFIX将没有可打印的字符放入JSON数据包(这些字符确实存在于我们的数据中),但是它们不能进入JSON。

    这个网站上的两个问题为我解决了这个问题,虽然我是为了PHP解决方案而不是在解决方案,因为我觉得这是比较优雅的两个。

    PHP solution

    在将字符串传递给json_decode()之前修复它

    $string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);
    

    ColdFusion solution

    在使用serializejson()之后,在该问题中使用cleanxmlstring()函数

        4
  •  0
  •   John Millikin    16 年前

    您可以尝试用另一个解析器解析它,并查找错误——我知道python的json解析器质量非常高。如果您安装了python,就可以轻松地运行文本 demjson 的语法检查器。如果它是一个非常大的数据集,您可以使用我的库 jsonlib --内存使用率将高于demjson,但运行速度会更快,因为它是用c编写的。