【问题标题】:Malformed JSON from GET request [duplicate]来自 GET 请求的格式错误的 JSON [重复]
【发布时间】:2020-11-08 15:37:06
【问题描述】:

我在使用 HTTP:retry(或任何其他方法)获取 JSON 文件时遇到了一些问题。当我执行->body(); 然后dd() 它时,JSON 文件最终看起来如下图所示:

我尝试使用 preg_replace 进行一些清理(但不太擅长正则表达式),似乎部分有效:

preg_replace( "/\r|\n/", "", $data );

因为 JSON 看起来像这样,所以不可能做到 ->json(); 它只是返回 null 然后我然后 dd() 它。我怎样才能正确地“清理”它,以便可以将结果作为普通 JSON 文件访问?

这是文本输出(缺少换行符 (\n):

b"""
{
"devname":"Event Telt",
"devsn":"18940256",
"time":"14:54:53 2020-07-18",
"timeunix":"1595084093",
"synch":"1",
"ch1":
{
 "name":"Temp Dataskap",
 "unit":"°C",
 "aval":"19.1",
 "alarm":0
},
"ch2":
{
 "name":"Temp Rom",
 "unit":"°C",
 "aval":"17.4",
 "alarm":0
},
"ch3":
{
 "name":"Fukt Rom",
 "unit":"%RH",
 "aval":"77.0",
 "alarm":1
},
"ch4":
{
 "name":"Channel 4",
 "unit":"",
 "aval":"n/a",
 "alarm":0
},
"ch5":
{
 "name":"Channel 5",
 "unit":"",
 "aval":"n/a",
 "alarm":0
}
}
"""

【问题讨论】:

  • 您能否将输出显示为文本而不是图像,因为它更易于其他人使用。
  • 当然@NigelRen,已添加。虽然它错过了图像显示的换行符 (\n)。感谢您提供任何修复建议
  • 不确定是不是dd(),但好像开头和结尾有多余的",试试trim('"', $json)(如果是这种情况,最好从源头解决问题)。
  • 也许共享用于生成此输出的代码会有用?
  • 这个输出是由我无法控制@ProfessorAbronsius 的外部程序生成的,遗憾的是建议的修剪没有做出改变......

标签: php json regex laravel get


【解决方案1】:

问题终于解决了,

问题似乎是 UTF-8 格式错误或其他问题(请参阅此答案:PHP json encode - Malformed UTF-8 characters, possibly incorrectly encoded

这个简单的oneliner已修复:mb_convert_encoding($temps->body(), 'UTF-8', 'UTF-8')

转储中的特殊字符和奇怪的插件似乎是 laravel 在 dd() 之后显示内容的副作用

谢谢大家的建议!

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多