【问题标题】:JSON parse javascript stringJSON解析javascript字符串
【发布时间】:2018-12-29 22:03:59
【问题描述】:

尝试使用 JSON.parse 解析 json 字符串时出现意外令牌错误

require "net/http"
require "uri"
url = URI.parse("https://url-goes-here")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
req = Net::HTTP::Get.new(url.request_uri)
req['Accept'] = 'application/json'
res = Net::HTTP.new(url.host, url.port).start do |http|
    http.request(req)
end
json = JSON.parse(res)
puts json

【问题讨论】:

  • JSON::ParserError: 765: 'jQuery18307882644047005491_1545806199753({"success":true,"code":0,"results":[{"productId":32817749905,"sellerId": 228928782,"oriMinPrice":"US $363.00","oriMaxPrice":"US $507.10","promotionId":317767132,"startTime":1545638400,"endTime":1546070340,"phase":1,"productTitle":"Top质量...您需要查看整个字符串吗?
  • 那不是JSON,更像是JS函数调用。
  • 远程站点使用 Struts 框架,添加了 .do 扩展名的 javascript 文件 它是什么类型的数据,如何解析?
  • 你想通过上面的代码实现什么是做一些功能,比如抓取。
  • 是的,我在刮

标签: ruby-on-rails json


【解决方案1】:

响应中的数据看起来像 JSONP,相当古老的 rpc 方法。它不是返回纯 JSON,而是输出some_js_callback_function_name({here_goes: the_json}),通常还有一个参数来控制函数名称。

要从中获取 json - 在解析之前修剪函数调用:

json_data = res.body.gsub(/\A[^(]+\(/, '').gsub(/\)\s*\z/, '')
json = JSON.parse(json_data)

【讨论】:

  • 这可能是由于) 后面的空白。尝试用.gsub(/\)\s*\z/, '')替换.chop
  • @stuckonrails 这是你的正则表达式中的语法错误(未转义的(),这个想法是从开始到第一个( 删除所有内容(除( 外的任何字符加上括号本身) 和尾括号以及它后面的任何空格
猜你喜欢
  • 2011-12-24
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多