gpt4 book ai didi

ruby-on-rails - 从 JSON 字符串中提取 JSON 对象

转载 作者:数据小太阳 更新时间:2023-10-29 08:53:36 24 4
gpt4 key购买 nike

我想将 JSON 字符串分解为更小的对象。我有两台服务器,一台充当整个应用程序的 Web 应用程序接口(interface),另一台是存储库/数据库。

我能够以 JSON 格式将信息从存储库检索到 Web 应用程序,但之后我不知道如何返回它。

这是返回的 JSON 示例:

{"respPages":[{"page":{"page_url":"http://www.google.com/","created_at":"2011-08-10T11:00:19Z","website_id":1,"updated_at":"2011-08-10T11:00:19Z","id":1}},{"page":{"page_url":"http://www.blank.com/services/content_services/","created_at":"2011-08-10T11:02:46Z","website_id":1,"updated_at":"2011-08-10T11:02:46Z","id":2}}],"respSite":{"website":{"created_at":"2011-08-10T11:00:19Z","website_id":null,"updated_at":"2011-08-10T11:00:19Z","website_url":null,"id":1}},"respElementTypes":[{"element_type":{"created_at":"2011-08-10T11:00:19Z","updated_at":"2011-08-10T11:00:19Z","id":1,"tag_name":"head"}},

JSON中有四个标签:

page
website
elementType
elementData

我想创建四个数组并用与这些标签匹配的对象填充它们。

我想代码是这样的:

#Get the json from repo using net/http
uri = URI.parse("http://127.0.0.1:3007/repository/infoid/1.json")
http = Net::HTTP.new(uri.host, uri.port)
response = http.request(Net::HTTP::Get.new(uri.request_uri))


@x = response.to_hash

@pages = Array.new
@websites= Array.new
@elementDatas = Array.new
@elementTypes = Array.new

#enter code here`#For every bit of the hash, find out what it is and allocate it accordingly
@x.each_with_index do |e,index|
if e.tagName == pages #Getting real javascripty here. There must be someway to check the tag or title of the element
@pages[index]=e
end

我的返回值目标是有四个数组,每个数组包含不同类型的对象:

  @pagesArray[1]

应该包含页面对象在 JSON 字符串中的第一次出现。然后对其他的做同样的事情。

当然,我需要进一步分解对象,但一旦我可以分解顶层并对它们进行分类,我就可以进行更深入的研究。

在 JSON 中已经有标签标题 respPagesrespWebsites 将所有对象分组。

如何将 JSON 转换回 Ruby 中的对象并使用标签名称之类的内容引用它们?

最佳答案

您应该能够使用标准 JSON 库解码任何 JSON 格式的内容:

JSON.load(...)

它会在格式错误的 JSON 数据上抛出异常,所以一定要彻底测试它并确保它可以处理所有重要的情况。

如果您尝试浏览 JSON 本身的结构,您可能需要编写一系列递归方法来处理沿途的每种情况。一个好的开始模式是这样的:

@data.each do |key, value|
case (key)
when 'someKey'
handle_some_key(value)
when 'otherKey'
handle_other_key(value)
end
end

您可以像本示例中那样将行为分解为方法,或者如果逻辑相当简单,则将其内联。

请注意,Array.new 的替代方法就是 [ ],就像在 JavaScript 中一样。例如:

@pages = [ ]

您会看到它在大多数 Ruby 示例中经常使用。 Hash.new 的替代方法是 { }

关于ruby-on-rails - 从 JSON 字符串中提取 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com