如何在API请求中以字符串形式发送JSON?RoR项目实操问询
如何在API请求中以字符串形式发送JSON(Ruby 2.5.0 + Rails 5)
嘿,针对你的需求——把一段(哪怕是无效的)JSON作为字符串值嵌入到API请求的JSON体里(比如{"data": "你的JSON内容"}),我给你整理了具体的实现步骤,在Ruby on Rails里非常好处理:
核心思路
要实现这个需求,关键是把待传递的JSON内容转义成合法的字符串,这样它就能安全地作为外层JSON对象的某个键的取值,不会破坏外层JSON的结构。
具体实现步骤
1. 定义你的原始JSON内容
先把那段待传递的内容存成一个字符串,哪怕它是不完整/无效的JSON也没关系:
raw_json = <<~RAW_JSON { "Lines": [{ "Words": [{ "WordText": "Coles", "Left": 53, "Top": 59, "Height": 20, "Width": 63 }, { "WordText": "Supermarkets", "Left": 130, "Top": 58, "Height": 24, "Width": 153 }, { "WordText": "Austral", "Left": 296, "Top": 58, "Height": 21, "Width": 85 }, { "Wo... RAW_JSON
2. 转义字符串,使其能嵌入外层JSON
Ruby的JSON库自带的generate方法可以帮你自动转义所有特殊字符(比如双引号、换行符),这比手动转义更可靠:
# Rails项目里默认已经引入了JSON库,无需额外require escaped_json_str = JSON.generate(raw_json)
3. 构建合法的请求体JSON
把转义后的字符串放到你需要的键(比如data)里,再转成最终的请求体:
request_body = { data: escaped_json_str }.to_json
这时候request_body就是符合你要求的格式:{"data": "转义后的完整JSON字符串"}
4. 发送API请求
用Rails常用的HTTP客户端发送请求时,记得设置Content-Type为application/json,确保服务器能正确解析请求体。这里举个Net::HTTP的例子(Rails自带,不需要额外安装依赖):
uri = URI('https://你的API地址.com/接口路径') http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' request = Net::HTTP::Post.new(uri) request['Content-Type'] = 'application/json' request.body = request_body response = http.request(request) # 可根据需求处理响应 puts response.body
关键注意点
- 不要手动转义特殊字符:比如自己替换双引号为
\",很容易漏处理其他特殊字符(比如反斜杠、换行),用JSON.generate是最稳妥的方式。 - 哪怕原始内容是无效JSON也没关系:因为我们只是把它当作普通字符串传递,API接收的是这个字符串本身,不会去解析它(除非API那边有特殊逻辑),所以原始内容的完整性不影响外层请求的合法性。
内容的提问来源于stack exchange,提问作者awsm sid
相关产品推荐
相关产品推荐

