Full script is like this :
@http = Net::HTTP.new('10.1.2.3')
request.body = {'cli' => 'show mystring', 'type' =>
‘exec’}.to_json
puts("Printing request : “)
print(request)
puts(“Printing request body : “)
print(request.body)
puts(“Sending HTTP request to NX-API at #{@http.address}:\n”)
response = @http.request(request)
puts(”\n Got response”)
puts(response.body)
puts(“Printing response before gsub:”)
print(response)
puts(“Printing response body:”)
print(response.body)
body = response.body.gsub(‘"’, '”')
puts("Printing body after gsub : ")
print(body)
body = JSON.parse(body)
Json response is constructed by the NGINX server running a lua script
using cjson :
res = "Hello World"
myreqJson = '{"cli_output": "'..res..'"}'
ngx.say(cjson.encode(myreqJson))
Output & error:
Printing request :
#Net::HTTP::Post:0x10a2492e8
Printing request body :
{“type”:“exec”,“cli”:“show mystring”}Sending HTTP request to NX-API at
10.1.2.3:
Got response
“{"cli_output": "Hello World"}”
Printing response before gsub:
#Net::HTTPOK:0x10a246bb0
Printing response body:
“{"cli_output": "Hello World"}”
Printing body after gsub :
“{“cli_output”: “Hello World”}”
/Library/Ruby/Gems/1.8/gems/json-1.8.3/lib/json/common.rb:155:in
parse': 757: unexpected token at '"{"cli_output": "Hello World"}" (JSON::ParserError) ' from /Library/Ruby/Gems/1.8/gems/json-1.8.3/lib/json/common.rb:155:in
parse’
from deep3.rb:84
Dansei Yuuki wrote in post #1181118:
It seems something went wrong earlier in the script when you got the
data via http? What’s the code and where are you getting the json from?
The following code works as expected for me:
require ‘net/http’
require ‘json’
response=Net::HTTP.get_response(URI(‘https://api.github.com/users/mralexgray/repos’))
data = JSON.parse(response.body)
puts data.class # => Array
The JSON data you posted resembles what one would get after calling the
String#inspect method on the real JSON string:
require ‘json’
a=‘{“cli_output”: “Hello World”}’
b=a.inspect
puts a # => {“cli_output”: “Hello World”}
puts b # => “{"cli_output": "Hello World"}”
JSON.parse(a) # works
JSON.parse(b)
JSON::ParserError: 757: unexpected token at ‘“{"cli_output": "Hello
World"}”’
from
./.rvm/gems/ruby-2.2.1@global/gems/json-1.8.3/lib/json/common.rb:155:in
parse' from ./.rvm/gems/ruby-2.2.1@global/gems/json-1.8.3/lib/json/common.rb:155:in
parse’
from (irb):18
from ./.rvm/rubies/ruby-2.2.1/bin/irb:11:in `’