How can I convert a string to JSON and save the data in an array?

huangapple go评论120阅读模式
英文:

How can I convert a string to JSON and save the data in an array?

问题

我正在使用这个JSON解析器从API获取的JSON响应中提取数据。它返回一个包含数据的字节数组,当我将字节数组转换为字符串并打印时,我得到以下输出:

  1. [{"Name": "Vikings", "Type": "show"},
  2. {"Name": "Spartacus: Gods Of The Arena", "Type": "show"},
  3. {"Name": "True Detective", "Type": "show"},
  4. {"Name": "The Borgias", "Type": "show"},
  5. {"Name": "Se7en", "Type": "movie"}]

由于这是一个普通的字符串,我无法对数据进行操作以提取我需要的内容。理想情况下,我想要得到这样的数组:

  1. shows := ["Vikings", "Spartacus: Gods Of The Arena", ...]
  2. movies := ["Se7en", "other data", ...]

我想要做的是根据用户请求的类型(例如:show、movie等)给用户提供标题。因此,我正在寻找一种将字符串转换为可以轻松操作(并可能过滤)的方法。

如果这种方法看起来很奇怪,我向你道歉,但我想不出其他的方法。我觉得Go的语法和做事方式与像JavaScript这样的其他语言非常不同,在JavaScript中,我可以轻松地用一两行代码完成这个任务。

英文:

I'm using this JSON parser to extract data from a JSON response I'm getting from an API. It returns a byte array containing the data and when convert the byte array to a string and print it, I get the following output:

  1. [{"Name": "Vikings", "Type": "show"},
  2. {"Name": "Spartacus: Gods Of The Arena", "Type": "show"},
  3. {"Name": "True Detective", "Type": "show"},
  4. {"Name": "The Borgias", "Type": "show"},
  5. {"Name": "Se7en", "Type": "movie"}]

Since this is a regular string, I have no way of maniuplating the data to extract whatever I need. Ideally, I'd like to have arrays like these:

  1. shows := ["Vikings", "Spartacus: Gods Of The Arena"...]
  2. movies := ["Se7en", "other data", ...]

What I want to do with these arrays is give the user titles based on the type (ie: show, movie, etc) he/she asked for. So essentially what I'm looking for is a way to convert the string in to something that I can easily manipulate (and possibly filter).

I apoligize if this seems like a strange way of doing this, but I can't think of any other way of doing it. I feel like Go's syntax and way of doing things is very unconventional compared to another language like Javascript where I could easily have done this in a line or two.

答案1

得分: 2

使用标准的encoding/json包将数据解组为与数据形状匹配的值:

  1. var items []struct { // 使用切片表示JSON数组,使用结构体表示JSON对象
  2. Name string
  3. Type string
  4. }
  5. if err := json.Unmarshal(d, &items); err != nil {
  6. log.Fatal(err)
  7. }

遍历解组后的项以查找节目和电影:

  1. var shows, movies []string
  2. for _, item := range items {
  3. switch item.Type {
  4. case "movie":
  5. movies = append(movies, item.Name)
  6. case "show":
  7. shows = append(shows, item.Name)
  8. }
  9. }

playground示例

英文:

Use the standard encoding/json package to unmarshal the data into a value matching the shape of the data:

  1. var items []struct { // Use slice for JSON array, struct for JSON object
  2. Name string
  3. Type string
  4. }
  5. if err := json.Unmarshal(d, &items); err != nil {
  6. log.Fatal(err)
  7. }

Loop through the unmarshaled items to find shows and movies:

  1. var shows, movies []string
  2. for _, item := range items {
  3. switch item.Type {
  4. case "movie":
  5. movies = append(movies, item.Name)
  6. case "show":
  7. shows = append(shows, item.Name)
  8. }
  9. }

playground example

huangapple
  • 本文由 发表于 2016年11月11日 21:03:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/40548648.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定