教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang 网络编程(10)文本处理

golang 网络编程(10)文本处理

发布时间:2022-01-25   编辑:jiaochengji.com
教程集为您提供golang 网络编程(10)文本处理等资源,欢迎您收藏本站,我们将为您提供最新的golang 网络编程(10)文本处理资源
golang_real.jpg
<h4>Json 处理</h4>

现在大部分我们从服务端获取数据都是Json 格式,所以对 json 格式数据处理在 web 应用开发中显得至关重要。有关 json 我想大家再熟悉不过了,这里就简单地提一句,json 就是一种轻量级的数据交换语言。尽管 json 是 javascript 的一个子集,但 json 是独立于语言的文本格式。

<pre><code class="lang-json hljs">{ "data":[ { "title":"angular base tut", "author":"zidea" } ] } </code></code></pre>

定义与上面 Json 数据对应的结构体 <code>Tut</code> 和 <code>TutReponse</code> 少写一个字母。json 数组对应 go 语言中<code>slice</code>。
这里结构 struct 的字段需要大写,如果 json 字段多于结构体,找不到对应字段就会被忽略。

<pre><code class="lang-go hljs">type Tut struct{ Title string Author string } type TutReponse struct{ Data []Tut } </code></code></pre> <pre><code class="lang-go hljs">package main import( "encoding/json" "fmt" ) type Tut struct{ Title string Author string } type TutReponse struct{ Data []Tut } func main() { var tuts TutReponse str := `{"data":[{"title":"angular base tut","author":"zidea"}]}` json.Unmarshal([]byte(str),&tuts) fmt.Println(tuts) } </code></code></pre> <pre><code class="lang-go hljs">json.Unmarshal([]byte(str),&tuts) </code></code></pre>

这是解析 json 的函数,接受 []byte 和表示任意类型接口作为参数,所以我们的 json 需要转为 []byte 才能使用。

<pre><code class="lang-go hljs">func Unmarshal(data []byte, v interface{}) error </code></code></pre>

因为 interface{} 可以表示任何类型的对象,这正和解析 json 的未知数据结构,在 Json 包中采用map[string]interface{} 和 []interface{} 结构来存储任意的 Json 对象和数组

<ul><li>bool 代表 JSON boolean</li> </ul><pre><code class="lang-go hljs"> b := []byte (`{"name":"zidea","age":30,"lang":["java","javascript","go","cpp","rust"]}`) var f interface{} err := json.Unmarshal(b, &f) if err != nil{ log.Fatal("json encoding:",err) } fmt.Println(f) </code></code></pre> <pre><code class="lang-go hljs">map[name:zidea age:30 lang:[java javascript go cpp rust]] </code></code></pre>

用之前我们学习有关 map 和接口类型推断知识来手动解析一下这个 json
golang 基础(16)map
golang 基础(20)接口

<pre><code class="lang-go hljs"> m := f.(map[string]interface{}) for k, v := range m{ switch vv := v.(type){ case string: fmt.Println(k, "is string", vv) case int: fmt.Println(k," is int ",vv) case []interface{}: fmt.Println(k," is an arry:") for i, u := range vv{ fmt.Println(i,u) } default: fmt.Println(k," is of a type ") } } </code></code></pre> <pre><code class="lang-go hljs">map[age:30 lang:[java javascript go cpp rust] name:zidea] name is string zidea age is of a type lang is an arry: 0 java 1 javascript 2 go 3 cpp 4 rust </code></code></pre>

生成 Json

<pre><code class="lang-go hljs">package main import( "encoding/json" "fmt" ) type Tut struct{ Title string Author string } type TutResponse struct{ Data []Tut } func main() { var tutResponse TutResponse tutResponse.Data = append(tutResponse.Data, Tut{Title:"vuejs basic tut",Author:"zidea"}) b, err := json.Marshal(tutResponse) if err != nil { fmt.Println("json err:", err) } fmt.Println(string(b)) } </code></code></pre> <pre><code class="lang-go hljs">b, err := json.Marshal(tutResponse) </code></code></pre>

输入一个结构体返回字节数组。


th-9.jpeg

到此这篇关于“golang 网络编程(10)文本处理”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang基础教程
网络编程是做什么的?
GO语言学习流程
学习golang开始前的准备工作
golang和python有什么区别?
Golang 网络编程实现的高并发聊天程序
golang的协程原理
Golang协程原理(一)
正在执行的goruntine发生阻塞,golang调度策略
Go核心编程-面向对象 [OOP]

[关闭]
~ ~