使用多个键解析 JSON 字符串

Parsing a JSON string with multiple keys

我正在尝试编写一个简单的 JSON 解析器。我正在从 odata.org 获取 JSON 字符串。

我尝试使用“Parsing a JSON string in ruby”中第二个答案中列出的技术访问已解析的 JSON 字符串的元素。您会看到 "value" 键中有一堆 "name" 键,我想访问并打印出来。

这是我目前拥有的:

require 'net/http'
require 'uri'
require 'rubygems'
require 'json'

def open(url)
  Net::HTTP.get(URI.parse(url))
end

page_content = open('http://services.odata.org/Northwind/Northwind.svc/?$format=json')
parsed = JSON.parse(page_content)

parsed["value"]["name"].each do |name|
p name["name"]
end

我已经打印出解析后的字符串,它似乎是正确解析的 JSON 字符串表示形式。如果您不想从网站获取 JSON 字符串,就在这里。

{"odata.metadata":"http://services.odata.org/Northwind/Northwind.svc/$metadata","value":[{"name":"Categories","url":"Categories"},{"name":"CustomerDemographics","url":"CustomerDemographics"},{"name":"Customers","url":"Customers"},{"name":"Employees","url":"Employees"},{"name":"Order_Details","url":"Order_Details"},{"name":"Orders","url":"Orders"},{"name":"Products","url":"Products"},{"name":"Regions","url":"Regions"},{"name":"Shippers","url":"Shippers"},{"name":"Suppliers","url":"Suppliers"},{"name":"Territories","url":"Territories"},{"name":"Alphabetical_list_of_products","url":"Alphabetical_list_of_products"},{"name":"Category_Sales_for_1997","url":"Category_Sales_for_1997"},{"name":"Current_Product_Lists","url":"Current_Product_Lists"},{"name":"Customer_and_Suppliers_by_Cities","url":"Customer_and_Suppliers_by_Cities"},{"name":"Invoices","url":"Invoices"},{"name":"Order_Details_Extendeds","url":"Order_Details_Extendeds"},{"name":"Order_Subtotals","url":"Order_Subtotals"},{"name":"Orders_Qries","url":"Orders_Qries"},{"name":"Product_Sales_for_1997","url":"Product_Sales_for_1997"},{"name":"Products_Above_Average_Prices","url":"Products_Above_Average_Prices"},{"name":"Products_by_Categories","url":"Products_by_Categories"},{"name":"Sales_by_Categories","url":"Sales_by_Categories"},{"name":"Sales_Totals_by_Amounts","url":"Sales_Totals_by_Amounts"},{"name":"Summary_of_Sales_by_Quarters","url":"Summary_of_Sales_by_Quarters"},{"name":"Summary_of_Sales_by_Years","url":"Summary_of_Sales_by_Years"}]}

在此先感谢您的帮助。希望这只是一个简单的修复。

你快搞定了。 "value" 包含一个数组,这是您要循环的数组。该数组的每个元素都包含一个您要访问的名称。

parsed["value"].each do |record|
  p record["name"]
end