You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Crystal语言解析含换行符的JSON抛出异常,如何正确解析?

解决Crystal中JSON解析时的JSON::ParseException问题

这个错误的核心原因是JSON字符串里包含了未转义的换行符,违反了JSON的语法规范。咱们一步步来解决:

问题根源

你写的代码里,%({"description": "foo \n bar"})这个字符串在Crystal中会把\n解析成实际的换行字符(也就是ASCII的换行符),但JSON标准要求字符串中的换行必须转义为\n(也就是字面意义上的反斜杠加n),所以解析器会报错说遇到了意外的字符。

正确的解决方案

1. 修正JSON字符串的转义

在Crystal的字符串字面量中,要让JSON解析器看到\n,你需要把反斜杠转义一次(也就是写两个反斜杠\\n),这样Crystal会把\\n解析成单个的\n传给JSON解析器,符合JSON语法:

require "json"
# 注意这里的\n被转义为\\n
result = Hash(String, String).from_json(%({"description": "foo \\n bar"}))
puts result["description"] # 输出: foo \n bar

2. 处理外部JSON源

如果你的JSON是从文件、API等外部来源获取的,只需要确保源JSON本身是符合规范的——也就是里面的换行符已经被正确转义为\n(即实际存储的字符是\+n,而不是直接的换行),Crystal的from_json方法就能正常解析。

3. 另一种写法:使用双引号字符串并转义

如果你不用%()语法,直接用双引号字符串,同样需要转义反斜杠:

require "json"
result = Hash(String, String).from_json("{\"description\": \"foo \\n bar\"}")

内容的提问来源于stack exchange,提问作者epergo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:08:36