2017-08-24 63 views
0

我有下面的Json結構,我試圖解析對象內部的關鍵字段。沒有映射完整的結構可以做到這一點?如何解析Json內的部分對象

{ 
"Records":[ 
    { 
    "eventVersion":"2.0", 
    "s3":{ 
     "s3SchemaVersion":"1.0", 
     "configurationId":"my-event", 
     "bucket":{ 
      "name":"super-files", 
      "ownerIdentity":{ 
       "principalId":"41123123" 
      }, 
      "arn":"arn:aws:s3:::myqueue" 
     }, 
     "object":{ 
      "key":"/events/mykey", 
      "size":502, 
      "eTag":"091820398091823", 
      "sequencer":"1123123" 
     } 
     } 
    } 
    ] 
} 

// Want to return only the Key value 
type Object struct { 
    Key string `json:"key"` 
} 
+0

JSON解析可用:https://開頭golang.org/pkg/encoding/json/ ...除此之外,您正在查看正則表達式或字符串函數 – steve76

+1

是的。您不需要包含完整的結構。 –

回答

2

對象是S3的一部分,所以我創建結構如下,我能讀重點

type Root struct { 
    Records []Record `json:"Records"` 
} 


type Record struct { 
    S3 SS3 `json:"s3"` 
} 

type SS3 struct { 
    Obj Object `json:"object"` 
} 

type Object struct { 
    Key string `json:"key"` 
} 
+1

或者使用匿名結構,如下所示:https://play.golang.org/p/6vxCVu7i0C – Adrian

2

有,這是非常快的只提取一些值幾個第三方JSON庫從你的json字符串。

庫:

GJSON例如:

const json = `your json string` 

func main() { 
    keys := gjson.Get(json, "Records.#.s3.object.key") 
    // would return a slice of all records' keys 

    singleKey := gjson.Get(json, "Records.1.s3.object.key") 
    // would only return the key from the first record 
} 
在Golang