正则表达式 – 基本的json>结构问题(使用’Go’)
我正在使用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’一次只能允许一个正则表达式… 更新: 我想我的新问题是,如何迭代: 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标识符的第一个字符是大写的,以便可以导出它们. 我编程并测试了这种方法,它似乎工作.由于这是一个学校项目,我还没有发布我的代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |