当前位置: 首页 > 知识库问答 >
问题:

解组复杂的Json

朱鹏
2023-03-14

我最近刚开始使用API和http请求,我正试图构建一个应用程序,使用Reddit API在特定的子编辑上拉帖子。

这是我正在练习的带有json和搜索参数的页面:https://www.reddit.com/r/hiphopheads.json?limit=1

查看Golang的JSON模块的标准库,我仍然不知道如何使用JSON。解组此复杂JSON。根据我收集到的信息,我必须定义一个类似于JSON结构的结构来实际保存数据

我将链接发布到这个网站,以了解JSON的实际结构:https://html" target="_blank">jsonformatter.curiousconcept.com/

现在我最想要的是数据下面的标题-

任何能让我走上正轨的帮助都非常感谢。谢谢!

共有2个答案

郑博厚
2023-03-14

看起来你试图解组的JSON过于复杂,所以你的结构必须复杂,但事实就是如此。

有一些工具可以从JSON生成结构定义,这样可以节省大量工作。使用您发布的JSON和此类在线工具,我生成了以下结构:

package main

type MyJsonName struct {
    Data struct {
        After    string      `json:"after"`
        Before   interface{} `json:"before"`
        Children []struct {
            Data struct {
                ApprovedBy          interface{}   `json:"approved_by"`
                Archived            bool          `json:"archived"`
                Author              string        `json:"author"`
                AuthorFlairCSSClass string        `json:"author_flair_css_class"`
                AuthorFlairText     interface{}   `json:"author_flair_text"`
                BannedBy            interface{}   `json:"banned_by"`
                Clicked             bool          `json:"clicked"`
                ContestMode         bool          `json:"contest_mode"`
                Created             int           `json:"created"`
                CreatedUtc          int           `json:"created_utc"`
                Distinguished       string        `json:"distinguished"`
                Domain              string        `json:"domain"`
                Downs               int           `json:"downs"`
                Edited              bool          `json:"edited"`
                Gilded              int           `json:"gilded"`
                Hidden              bool          `json:"hidden"`
                HideScore           bool          `json:"hide_score"`
                ID                  string        `json:"id"`
                IsSelf              bool          `json:"is_self"`
                Likes               interface{}   `json:"likes"`
                LinkFlairCSSClass   string        `json:"link_flair_css_class"`
                LinkFlairText       string        `json:"link_flair_text"`
                Locked              bool          `json:"locked"`
                Media               interface{}   `json:"media"`
                MediaEmbed          struct{}      `json:"media_embed"`
                ModReports          []interface{} `json:"mod_reports"`
                Name                string        `json:"name"`
                NumComments         int           `json:"num_comments"`
                NumReports          interface{}   `json:"num_reports"`
                Over18              bool          `json:"over_18"`
                Permalink           string        `json:"permalink"`
                Quarantine          bool          `json:"quarantine"`
                RemovalReason       interface{}   `json:"removal_reason"`
                ReportReasons       interface{}   `json:"report_reasons"`
                Saved               bool          `json:"saved"`
                Score               int           `json:"score"`
                SecureMedia         interface{}   `json:"secure_media"`
                SecureMediaEmbed    struct{}      `json:"secure_media_embed"`
                Selftext            string        `json:"selftext"`
                SelftextHTML        string        `json:"selftext_html"`
                Stickied            bool          `json:"stickied"`
                Subreddit           string        `json:"subreddit"`
                SubredditID         string        `json:"subreddit_id"`
                SuggestedSort       interface{}   `json:"suggested_sort"`
                Thumbnail           string        `json:"thumbnail"`
                Title               string        `json:"title"`
                Ups                 int           `json:"ups"`
                URL                 string        `json:"url"`
                UserReports         []interface{} `json:"user_reports"`
                Visited             bool          `json:"visited"`
            } `json:"data"`
            Kind string `json:"kind"`
        } `json:"children"`
        Modhash string `json:"modhash"`
    } `json:"data"`
    Kind string `json:"kind"`
}

通常,这些工具的输出仍然需要手动调整才能正常工作。例如:

MediaEmbed          struct{}      `json:"media_embed"`

我很确定这里不需要这个。但它确实对展示基本思想和正确理解大部分内容大有帮助。还有其他类似的工具可以尝试。

山阳辉
2023-03-14

您不必在结构中定义不需要的字段。解组将只解码结构中存在的值。但是不幸的是,对于嵌套的JSONs,您还必须定义所有的父字段(不像在xml包中,您可以在标记中定义路径)。因此,您的结构可能如下所示:

type Foo struct {
    Data struct {
        Children []struct {
            Data struct {
                Title string
            }
        }
    }
}

这里有一个可行的例子:https://play.golang.org/p/UeUYfWBONL

 类似资料:
  • 主要内容:GWT 复杂组件 介绍,GWT 常用的复杂组件GWT 复杂组件 介绍 表单小部件允许用户与应用程序进行高级交互功能。每个 Complex 小部件都从 Widget 类继承属性,而 Widget 类又从 UIObject 继承属性。 小组件 描述 GWT UIObject类 此小部件包含文本,不会使用 <div> 元素将其解释为 HTML,从而使其以块布局显示。 GWT Widget类 此小部件可以包含 HTML 文本并使用 <div> 元素显

  • 当用户搜索租赁时,他可能还想将搜索范围缩小到特定城市。虽然我们的初始租赁列表组件仅显示租赁信息,但此新的过滤器组件还将允许用户以过滤条件的形式提供输入。 首先,让我们生成新的组件list-filter。我们的需求是希望组件根据用户输入过滤租赁列表。 $ ember g component list-filter installing component create app/component

  • 我有以下格式的json文件: 那么,我如何在pig中解析这个json。。 此外,categories和rep中可以有一些char。。可能并不总是空的。我做了以下尝试。 但我得到这个错误: 组织。科德豪斯。杰克逊。JsonParseException:意外字符('D'(代码68)):在[源代码:java.io]处应为有效值(数字、字符串、数组、对象、“true”、“false”或“null”)。By

  • 问题内容: 我想在下面学习给定语句的时间复杂度。(在Java8中) 任何想法? 问题答案: 由于时间复杂度取决于所有操作,因此没有通用的答案。由于必须完全处理流,因此必须将其基本时间复杂度乘以每个元素完成的所有操作的成本。假设迭代成本本身并不比差,大多数流源就是这种情况。 因此,假设没有影响时间复杂度的中间操作,则必须评估每个元素的功能,该功能应独立于其他元素,因此不影响时间复杂度(无论它有多昂贵

  • 问题内容: 我正在尝试对复杂的numpy数组进行JSON编码,并且我从astropy找到了一个实用程序(http://astropy.readthedocs.org/en/latest/_modules/astropy/utils/misc.html#JsonCustomEncoder)目的: 这对于复杂的numpy数组非常适用: 作为倾销的收益: 问题是,我无法自动将其读回到复杂的数组中。例如:

  • 我有一个这样的数组: 中的数组包括另外两个数组(第一个不是必需的,但看看第二个(:这个数组包含不同的 x/y 坐标 ) 我想得到另一个数组的结果,如下所示(解释如下): 数组现在按其 x 值排序 ( -- 我不知道如何编码;这是我到目前为止所拥有的: 编辑:有一点忘记说了,就是应该分组的坐标的不应该大于。看下面的例子: