基本的なjson>構造体の質問を使用'Go')
-
18-09-2019 - |
質問
仕事をしてい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("%s\n", aoName)
regexp_pattern := "/" + aoName + "/"
regex, _ := regexp.Compile(regexp_pattern);
cleaned_json := regex.ReplaceAllString(string(body2), "ntrends")
os.Stdout.WriteString(cleaned_json)
見せないます。私を指定する正規表現のは間違いだったのか?と思われるいくつかはできる正規表現での時間---
更新:できる変更の日付/時間"ntrends"が"非整列化"さん。かもへのインタフェースを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"]]]]
"を使用---の範囲"が与えてくれたかも...
解決
Twitterで有名な 失敗し鯨, の Twitter API 取得しなければならなすぎ;この凄惨な様相を呈します。
Twitter の動向現在の検索API方法 対応できる表現を使っ動向を簡単に行える例)標準規格化しJSON形式として:
{
"as_of":1268069036,
"trends":[
{"name":"Happy Women's Day","query":"\"Happy Women's Day\" OR \"Women's Day\""},
{"name":"#MusicMonday","query":"#MusicMonday"},{"name":"#MM","query":"#MM"}
]
}
の as_of
日Unix時間の秒数から1/1/1970.
では、この記述:
type Trend struct {
Name string
Query string
}
type Current struct {
As_of int64
Trends []Trend
}
Twitter manglesの標準規格化し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"}
]
}
}
時には、Twitterを返します相当JSON形式です。
{
"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"}
]
},
"as_of":1268069036
}
"2010-03-08 17:23:56":
はJSONオブジェクトの名前です。しかし、これは馬鹿じゃなかろうかと思う----文字列形式 as_of
.
まだまだ現役として活躍してい "2010-03-08 17:23:56":
のオブジェクト名 "ntrends":
(入れ子では、書き換えることで冗長化 as_of
文字列関しましては、以下の改正Twitter JSON形式:
{
"as_of":1268069036,
"trends":{
"ntrends":[
{"name":"Happy Women's Day","query":"\"Happy Women's Day\" OR \"Women's Day\""},
{"name":"#MusicMonday","query":"#MusicMonday"}
]
}
}
でスキャン、フレームの中にコンテンツを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":`)
今までのスキャン、フレームの中にコンテンツをJSON形式の aoName
値に置き換え "ntrends":
の改正Twitter JSON形式です。
碁の改正により、TwitterのJSON形式で記述:
type Trend struct {
Name string
Query string
}
type NTrends struct {
NTrends []Trend
}
type Current struct {
As_of int64
Trends NTrends
}
注意:最初の文字の構造体及び分野識別子の大文字できるように輸出されました。
私はプログラミング試験が、この考え方のようです。この学校プロジェクトのためには、まだ公開。
他のヒント
うわ、これはGoが解析できないJSONのように思えます。 TwitterはそのAPIに奇妙なもののこの種のすべての時間を引きます。
「トレンド」の目的は、トレンドトピックのアレイに日付オブジェクトからマップです。残念ながら、ゴーJSONパーサーはこれを処理するために十分にスマートではありません。
それまでは手動でこのフォーマットを解析し、または単にトピックの正規表現検索を行うことができます。
いずれにせよ、私は囲碁の問題としてこれを掲示し、彼らの言うことを参照してくださいね。 http://code.google.com/p/go/issues/list
以前の回答に改訂ます。
Twitterの検索APIメソッド傾向応答が便利正規と正規JSON形式である
{"trends":[{"name":"#amazonfail","url":"http:\/\/search.twitter.com\/search?q=%23amazonfail"},... truncated ...],"as_of":"Mon, 13 Apr 2009 20:48:29 +0000"}
Twitterの検索APIメソッドの動向現在、毎日、毎週応答が不必要に似て不便なJSON形式で、しかし、次のとおりです:
{"trends":{"2009-03-19 21:00":[{"query":"AIG","name":"AIG"},... truncated ...],... truncated ...},"as_of":1239656409}
アルゴリズムとデータ構造のカプセル化のためのルールの明確な違反では、これは不必要現在、これらの方法は、その実施のためのマップまたは辞書を使用することを開示している。
現在の傾向が使用して、囲碁のデータ構造にをのTwitterからJSONデータを読み込むにはJSONパッケージには、我々は次のような何かを行うことができます。
package main
import (
"fmt"
"json"
)
type Trend struct {
Name string
Query string
}
type Current struct {
As_of int64
Trends map[string][]Trend
}
var currentTrends = `{"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\""}]}}`
func main() {
var ctJson = currentTrends
var ctVal = Current{}
ok, errtok := json.Unmarshal(ctJson, &ctVal)
if !ok {
fmt.Println("Unmarshal errtok: ", errtok)
}
fmt.Println(ctVal)
}