婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > golang如何修改json文件內(nèi)容的方法示例

golang如何修改json文件內(nèi)容的方法示例

熱門(mén)標(biāo)簽:高德地圖標(biāo)注口訣 南通如皋申請(qǐng)開(kāi)通400電話 西部云谷一期地圖標(biāo)注 中國(guó)地圖標(biāo)注省會(huì)高清 廣州呼叫中心外呼系統(tǒng) 浙江高速公路地圖標(biāo)注 地圖標(biāo)注的汽車(chē)標(biāo) 學(xué)海導(dǎo)航地圖標(biāo)注 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng)

使用一個(gè)例子說(shuō)明golang如何訪問(wèn)和修改json文件;主要分三步:

  1. 從文件讀入json串
  2. 把json串轉(zhuǎn)變成golang對(duì)象
  3. 遍歷或者修改json值
  4. 寫(xiě)回文件

假定用戶輸入json串為:

{
 "user": {
  "mspid": "admin",
  "email": "admin@domain.com"
 }, 
 "nodes": [
  {  
   "name": "node1",
   "location": "node1.domain.com:8080"
  }, 
  {  
   "name": "node2",
   "location": "node2.domain.com:8080"
  }  
 ]
}

我們的目標(biāo)是把node1和node2的location域換掉。

代碼如下

import (
  "fmt"
  "io/ioutil"
  "encoding/json"
)

func HandleJson(jsonFile string, outFile string) error {
  // Read json buffer from jsonFile
  byteValue, err := ioutil.ReadFile(jsonFile)
  if err != nil {
    return err
  }

  // We have known the outer json object is a map, so we define result as map.
  // otherwise, result could be defined as slice if outer is an array
  var result map[string]interface{}
  err = json.Unmarshal(byteValue, result)
  if err != nil {
    return err
  }

  // handle peers
  nodes:= result["nodes"].([]interface{})
  for _, node:= range node{
    m := node.(map[string]interface{})
    if name, exists := m["name"]; exists {
      if name == "node1" {
        m["location"] = "new-value1"
      } else if name == "node2" {
        m["location"] = "new-value2"
      }
    }
  }

  // Convert golang object back to byte
  byteValue, err = json.Marshal(result)
  if err != nil {
    return err
  }

  // Write back to file
  err = ioutil.WriteFile(outFile, byteValue, 0644)
  return err
}

這個(gè)地方主要用的是golang的interface{}數(shù)據(jù)類(lèi)型,然后把interface{}轉(zhuǎn)換成真正的數(shù)據(jù)類(lèi)型。

這個(gè)函數(shù)可以擴(kuò)充成動(dòng)態(tài)的解析任何類(lèi)型,只要把所有的類(lèi)型全部定義成interface{},然后使用動(dòng)態(tài)類(lèi)型檢測(cè)就可以知道每一個(gè)具體元素的類(lèi)型了,最終達(dá)到類(lèi)型jq的功能,訪問(wèn)和修改json文件。

var x interface{} = ...

switch x.(type) {
  case nil:
    fmt.Println("x is nil")
  case int: 
    fmt.Println("x is int")
  case bool :
    fmt.Println("x is bool")
  case string:
    fmt.Println("x is string")
  case []interface{}:
    fmt.Println("x is slice")
  case map[string]interface{}:
    fmt.Println("x is map")
  default:
    fmt.Println("type unknown")
  }  
}

PS:據(jù)說(shuō)json-iteator 是目前golang中對(duì)json格式數(shù)據(jù)處理最快的包(比官方j(luò)son包快6倍),好像是滴滴團(tuán)隊(duì)開(kāi)源的,使用起來(lái)也非常方便,有興趣的可以學(xué)習(xí)學(xué)習(xí),下面我們看看官方的示例代碼,使用起來(lái)也是很方便

package main

import "github.com/json-iterator/go"

type User struct {
  Name string
  Age int8
}

func main() {
  user := User{
      Name: "tanggu",
      Age: 18,
    }
    var jsoniter = jsoniter.ConfigCompatibleWithStandardLibrary
    // 序列化
    data, err := jsoniter.Marshal(user)
    if err != nil {
      log.Fatal(err)
    }
    fmt.Println(string(data))

    // 反序列化
    var people User
    err = jsoniter.Unmarshal(data, people)
    if err != nil {
      log.Fatal(err)
    }
    fmt.Println(people)
}

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • golang使用json格式實(shí)現(xiàn)增刪查改的實(shí)現(xiàn)示例
  • golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法
  • golang結(jié)構(gòu)體與json格式串實(shí)例代碼
  • Golang JSON的進(jìn)階用法實(shí)例講解
  • golang如何自定義json序列化應(yīng)用詳解
  • golang json性能分析詳解
  • golang中json反序列化可能遇到的問(wèn)題
  • Golang map如何生成有序的json數(shù)據(jù)詳解
  • 利用Golang解析json數(shù)據(jù)的方法示例
  • Golang中使用JSON的一些小技巧分享
  • golang實(shí)現(xiàn)sql結(jié)果集以json格式輸出的方法
  • Golang 如何解析和生成json

標(biāo)簽:常州 東營(yíng) 德宏 貴州 吐魯番 許昌 曲靖 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang如何修改json文件內(nèi)容的方法示例》,本文關(guān)鍵詞  golang,如何,修改,json,文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang如何修改json文件內(nèi)容的方法示例》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang如何修改json文件內(nèi)容的方法示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 珠海市| 精河县| 江北区| 阿拉善左旗| 乌兰县| 周宁县| 炎陵县| 安吉县| 沾益县| 锦屏县| 宿松县| 前郭尔| 东阳市| 郎溪县| 宝清县| 望都县| 双柏县| 华安县| 木兰县| 镇赉县| 呈贡县| 太保市| 湘潭市| 怀柔区| 潮安县| 苗栗县| 古浪县| 泰兴市| 康定县| 南江县| 恩施市| 古蔺县| 永春县| 上饶市| 仪陇县| 玉山县| 黄骅市| 云南省| 登封市| 定陶县| 伊宁市|