簡體   English   中英

在Go中解析JSON文件

[英]Parsing a JSON file in Go

我在Go中解析JSON文件時遇到問題。

我沒有收到任何錯誤,但沒有得到輸出。

我嘗試了幾種不同的方法,但似乎無法使用。 任何幫助將不勝感激。 提前致謝。

package simplefiles

import (
    "encoding/json"
    "fmt"
    "os"
)

//PluginInfo - struct for plugins.json
var PluginInfo struct {
    LatestVersion   string   `json:"latest_version"`
    LastUpdated     string   `json:"last_updated"`
    Popular         bool     `json:"popular"`
    Info            []string `json:"Info"`
}

//ParsePlugins - parses plugins.json
func ParsePlugins() {
    pluginsFile, err := os.Open("test.json")
    if err != nil {
        fmt.Println("opening config file", err.Error())
    }
    jsonParser := json.NewDecoder(pluginsFile)
    if err = jsonParser.Decode(&PluginInfo); err != nil {
        fmt.Println("parsing config file", err.Error())
    } else {
        fmt.Printf(PluginInfo.LastUpdated)
    }
    return
}

JSON示例:

{  
   "my-test-site":{  
      "latest_version":"6.4.5",
      "last_updated":"2016-05-22T00:23:00.000Z",
      "popular":true,
      "infomation":[  
         {  
            "id":6043,
            "title":"Test info 1",
            "created_at":"2014-08-01T10:58:35.000Z",
            "updated_at":"2015-05-15T13:47:24.000Z",
            "published_date":null,
            "references":{  
               "url":[  
                  "http://samplesite1.com",
                  "http://samplesite2.com"
               ]
            },
            "site_type":"info",
            "fixed_v":"1.10"
         }
      ]
   },
   "another-test-site":{  
      "latest_version":"2.1.0",
      "last_updated":"2016-06-12T08:36:00.000Z",
      "popular":false,
      "infomation":[  
         {  
            "id":6044,
            "title":"Test site 2 info",
            "created_at":"2014-08-01T10:58:35.000Z",
            "updated_at":"2015-05-15T13:47:24.000Z",
            "published_date":null,
            "references":{  
               "otherinfo":[  
                  "blah blah blah"
               ]
            },
            "site_type":"search",
            "fixed_v":"1.2.0"
         }
      ]
   }
}

您的問題是您的JSON數據是字符串到您定義的結構類型的映射,而不是直接到結構類型的映射。 如果您按照下面的方式稍稍修改代碼,但是您需要索引到映射中以獲取每個struct值:

package main

import (
        "encoding/json"
        "fmt"
        "os"
)

//PluginInfo - struct for plugins.json
var PluginInfo map[string]struct { // NOTICE map of string to struct
        LatestVersion string   `json:"latest_version"`
        LastUpdated   string   `json:"last_updated"`
        Popular       bool     `json:"popular"`
        Info          []string `json:"Info"`
}

//ParsePlugins - parses plugins.json
func ParsePlugins() {
        pluginsFile, err := os.Open("test.json")
        if err != nil {
                fmt.Println("opening config file", err.Error())
        }
        jsonParser := json.NewDecoder(pluginsFile)
        if err = jsonParser.Decode(&PluginInfo); err != nil {
                fmt.Println("parsing config file", err.Error())
        } else {
                for key, val := range PluginInfo {
                        fmt.Printf("Key %q, last updated %s\n", key, val.LastUpdated)
                }
        }
        return
}

func main() {
        ParsePlugins()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM