JSON、XML序列化与反序列化

序列化
pa := &Address{"家","太原","中国"}
wa := &Address{"工作","昆山","江苏"}
vc := &VCard{"王","剑英",[]*Address{pa,wa},"啊哈哈"}
js,_ := json.Marshal(vc)//编码生成js([]byte),在Web中使用MarshalforHTML
fmt.Println(string(js))
file,_ := os.OpenFile("vcard.json",os.O_CREATE|os.O_WRONLY,0666)
defer file.Close()
encoder := json.NewEncoder(file)//生成向文件输出的输出流
encoder.Encode(js)//输出js
JSON 与 Go 类型对应如下:
bool 对应 JSON 的 boolean
float64 对应 JSON 的 number
string 对应 JSON 的 string
nil 对应 JSON 的 null
不是所有的数据都可以编码为 JSON 类型:只有验证通过的数据结构才能被编码:
JSON 对象只支持字符串类型的 key;要编码一个 Go map 类型,map 必须是 map[string]T(T是 json 包中支持的任何类型)
Channel,复杂类型和函数类型不能被编码
不支持循环数据结构;它将引起序列化进入一个无限循环
指针可以被编码,实际上是对指针指向的值进行编码(或者指针是 nil)

反序列化:
UnMarshal,把JSON解码为数据结构
func Unmarshal(data []byte,v interface{}) error
编码后的数据是js,解码时,首先创建数据结构用来保存解码的数据 v interface。
并调用Unmarshal(js,&v),解析[]byte中的Json数据并将结果存入指针&v指向的数据结构

解码任意的数据
Json包使用map[string]interface{}储存任意的JSON对象和数组;
其可以被反序列化为任何的JSON blob存储到接口值中。

b := []byte(`{"Name": "Wednesday", "Age": 6, "Parents": ["Gomez", "Morticia"]}`)

var f interface{}
json.Unmarshal(b,&f)
m := f.(map[string]interface{})
for k,v := range m{
switch vv := v.(type) {
case string:
fmt.Println(k,"is string",vv)
case float64:
fmt.Println(k,"is float",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 I don‘t know to handle")

编码和解码流:
json包提供Decoder和Encoder类型来支持常用JSON数据流读写。
NewDecoder相当于io.Reader
func NewDecoder(r io.Reader) *Decoder
NewEncoder相当于io.Writer
func NewEncoder(w io.writer) *Encoder
把JSON直接写入文件,使用json.NewEncoder后再使用Encode().
从文件中读JSON,使用json.NewDecoder后再事项Decode()

decode()方法怎么使用,看看api
反序列化。看看别人怎么做的吧

xml的反序列化
package main

import (
"encoding/xml"
"fmt"
"strings"
)

var t, token xml.Token
var err error

func main() {
input := "<Person><FirstName>Laura</FirstName><LastName>Lynn</LastName></Person>"
inputReader := strings.NewReader(input)
p := xml.NewDecoder(inputReader)

for t, err = p.Token(); err == nil; t, err = p.Token() {
switch token := t.(type) {
case xml.StartElement:
name := token.Name.Local
fmt.Printf("Token name: %s\n", name)
for _, attr := range token.Attr {
attrName := attr.Name.Local
attrValue := attr.Value
fmt.Printf("An attribute is: %s %s\n", attrName, attrValue)
// ...
}
case xml.EndElement:
fmt.Println("End of token")
case xml.CharData:
content := string([]byte(token))
fmt.Printf("This is the content: %v\n", content)
// ...
default:
// ...
}
}
}

EnCoder:自动编码(但是使用的时候必须是纯Go环境,还贴心的加了一个换行)
DeCoder:自动解码到对象

不是纯Go环境,可以通过Marshal将对象(struct转化为json的数组)转化为字节数组
然后存到文件中。

原文地址:https://www.cnblogs.com/mcmx/p/11390874.html

时间: 2024-08-06 16:40:11

JSON、XML序列化与反序列化的相关文章

Json/XML序列化和反序列化

1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:JsonConvert.SerializeObject 反序列化:JsonConvert.DeserializeObject 2)使用JavaScriptSerializer类 使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dl

JSON/XML序列化与反序列化(非构造自定义类)

隔了很长时间再重看自己的代码,觉得好陌生..以后要养成多注释的好习惯..直接贴代码..对不起( ▼-▼ ) 保存保存:进行序列化后存入应用设置里 ApplicationDataContainer _appSettings = ApplicationData.Current.LocalSettings; //这个是保存一些页面输入信息 private async void Save_Click(object sender, RoutedEventArgs e) { if (userName.Tex

Json的序列化与反序列化

想想某一天,你在看LOL攻略的时候,系统突然崩溃了,接着浏览器出现了密密麻麻的LOL帐号和密码,你一定在想:"天啊,这次要发财了,说不定里面有超凡号或者王者号,我得赶紧全部记下来."然而说完你就惊呆了,那么多的帐号密码,而且全部写在了Json里面,一个一个复制粘贴要记到什么时候啊...如果这时候我在你身边,我一定会帮助你的,前提是,要分几个王者号给我噢...  言归正传. 上面举的例子虽然有点不太现实,但其实是想和大家说明一个问题,如果要解析Json或XML,请不要使用检索字符串的方式

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化 本节导读: 介绍JSON的结构,在JS中的使用.重点说明JSON如何在.NET中快带序列化和反序列化.最后介绍在使用.NET序列化JSON过程中的注意事项. 读前必备: A.泛型       [.net 面向对象编程基础]  (18) 泛型 B.LINQ使用  [.net 面向对象编程基础] (20) LINQ使用 1. 关于JSON JSON的全称是”JavaScrip

XML 序列化与反序列化

XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param name="type">对象类型</param> /// <param name="obj">对象</param> /// <param name="fileName">序列化的XML文件路径<

ASP.NET 中JSON 的序列化和反序列化

JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理. 一.JSON简介: JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号''{}'

Note4:XML序列化和反序列化

XML序列化和反序列化 待总结!

ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化

首先,先简单的谈一下什么是序列化与反序列化,序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化(Deserialization)对象的状态,重新创建该对象. 一般我们把Json的序列化与反序列化用在哪些地方呢?对于网站开发来说,一般我们会用Json来进行前台和后台的数据传递(常与Ajax一起使用),而这个过程就涉及到了Json的序列化与反序列化. 那么我们就来简单看

JAVA与JSON的序列化、反序列化

package com.linkage.app.memcache; import java.util.HashMap;import java.util.Map.Entry; import net.sf.ezmorph.Morpher;import net.sf.ezmorph.MorpherRegistry;import net.sf.ezmorph.bean.BeanMorpher;import net.sf.json.JSONObject;import net.sf.json.util.JS

c# XML序列化与反序列化 属性字段标识

序列化对象 public class People { [XmlAttribute("NAME")] public string Name { set; get; } [XmlAttribute("AGE")] public int Age { set; get; } } [XmlRoot("Root")] public class Student : People { [XmlElement("CLASS")] public