加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 基本的json>结构问题(使用’Go’)

发布时间:2020-12-14 02:29:08 所属栏目:百科 来源:网络整理
导读:我正在使用twitter的api,试图从中获取json数据 http://search.twitter.com/trends/current.json 看起来像: {"as_of":1268069036,"trends":{"2010-03-08 17:23:56":[{"name":"Happy Women's Day","query":""Happy Women's Day" OR "Women's Day""},{"nam
我正在使用twitter的api,试图从中获取json数据
http://search.twitter.com/trends/current.json

看起来像:

{"as_of":1268069036,"trends":{"2010-03-08 17:23:56":[{"name":"Happy Women's Day","query":""Happy Women's Day" OR "Women's Day""},{"name":"#MusicMonday","query":"#MusicMonday"},{"name":"#MM","query":"#MM"},{"name":"Oscars","query":"Oscars OR #oscars"},{"name":"#nooffense","query":"#nooffense"},{"name":"Hurt Locker","query":""Hurt Locker""},{"name":"Justin Bieber","query":""Justin Bieber""},{"name":"Cmon","query":"Cmon"},{"name":"My World 2","query":""My World 2""},{"name":"Sandra Bullock","query":""Sandra Bullock""}]}}

我的结构看起来像:

type trend struct {  
 name  string  
 query string  
}  

type trends struct {  
 id string  
 arr_of_trends []trend  
}  

type Trending struct {  
 as_of  string  
 trends_obj trends  
}

然后我将JSON解析为Trending类型的变量.我对JSON很新,所以我主要关注的是确保我已正确设置数据结构来保存返回的json数据.

我正在’Go’中写这个用于学校的项目. (这不是特定任务的一部分,只是我正在演示的语言演示)

更新:根据PeterSO的评论,我正在进行正则表达式路线.使用:

Cur_Trends := new(Current)
/* unmarshal the JSON into our structures */

//find proper json time-name
aoUnixTime,_,_ := os.Time()

// insert code to find and convert as_of Unix time to aoUnixTime
    aoName := time.SecondsToUTC(aoUnixTime).Format(`"2006-01-02"`)
    fmt.Printf("%sn",aoName)
    regexp_pattern := "/" + aoName + "/"
    regex,_ := regexp.Compile(regexp_pattern);

    cleaned_json := regex.ReplaceAllString(string(body2),"ntrends")
    os.Stdout.WriteString(cleaned_json)

不显示任何更改.我指的是正则表达式错误吗?似乎’Go’一次只能允许一个正则表达式…

更新:
现在可以将日期/时间更改为“ntrends”,但“Unmarshaling”不起作用.我可以使用json.Decode将所有内容移动到接口中,但不能遍历它…

我想我的新问题是,如何迭代:

map[as_of:1.268176902e+09 trends:map[ntrends:[map[name:#nowplaying query:#nowplaying] map[name:#imtiredofseeing query:#imtiredofseeing] map[name:#iWillNever query:#iWillNever] map[name:#inmyfamily query:#inmyfamily] map[name:#raiseyourhandif query:#raiseyourhandif] map[name:#ripbig query:#ripbig] map[name:QVC query:QVC] map[name:#nooffense query:#nooffense] map[name:#RIPLaylaGrace query:#RIPLaylaGrace] map[name:Justin Bieber query:"Justin Bieber"]]]]

使用“for … range”给了我奇怪的东西……

Twitter因其 Fail Whale而闻名,Twitter API也获得了不及格的成绩;这太糟糕了.

可以使用规范的,规范化的JSON格式表达Twitter trends current Search API method响应(仅使用两个趋势来简化示例):

{
    "as_of":1268069036,"trends":[
        {"name":"Happy Women's Day","query":"#MM"}
    ]
}

as_of日期是Unix时间,即自1970年1月1日以来的秒数.

在Go中,这可以通过以下方式描述:

type Trend struct {
    Name  string
    Query string
}

type Current struct {
    As_of  int64
    Trends []Trend
}

Twitter破坏了规范的,规范化的JSON格式,成为:

{
    "as_of":1268069036,"trends":{
        "2010-03-08 17:23:56":[
            {"name":"Happy Women's Day","query":"#MusicMonday"}
        ]
    }
}

有时,Twitter会返回此等效的JSON表单.

{
    "trends":{
        "2010-03-08 17:23:56":[
            {"name":"Happy Women's Day","query":"#MusicMonday"}
        ]
    },"as_of":1268069036
}

“2010-03-08 17:23:56”:是一个JSON对象名.然而,它是 – 无意义的 – 字符串形式的as_of.

如果我们用对象名称“ntrends”代替“2010-03-08 17:23:56”:(对于嵌套趋势),覆盖冗余的as_of字符串时间,我们有以下修订的Twitter JSON表单:

{
    "as_of":1268069036,"trends":{
        "ntrends":[
            {"name":"Happy Women's Day","query":"#MusicMonday"}
        ]
    }
}

扫描Twitter JSON表单“as_of”:很容易,读取以下数字作为as_of Unix时间,并将其转换为JSON名称形式,例如:

var aoUnixTime int64
// insert code to find and convert as_of Unix time to aoUnixTime
aoName := time.SecondsToUTC(aoUnix).Format(`"2006-01-02 15:04:05":`)

现在我们可以扫描Twitter JSON表单中的aoName值并将其替换为“ntrends”:获取修订后的Twitter JSON表单.

在Go中,修订后的Twitter JSON表单可以通过以下方式描述:

type Trend struct {
    Name  string
    Query string
}

type NTrends struct {
    NTrends []Trend
}

type Current struct {
    As_of  int64
    Trends NTrends
}

注意:struct和field标识符的第一个字符是大写的,以便可以导出它们.

我编程并测试了这种方法,它似乎工作.由于这是一个学校项目,我还没有发布我的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读