JSON+JavaScript处理JSON的简约例子

日期: 2019-12-06 15:36 浏览次数 :

明天做Go开垦的时候接触到了七个新的orm第三方框架gorose,在接受的经过中,发掘未有相近beego实行直接对struct构造进行操作的办法,有一点API是透过map进行数据库相关操作,那么就须求大家把struct转形成map,上边是是本人尝试三种不一样struct转变到map的章程

JSON(JavaScript Object Notation卡塔尔是意气风发种轻量级的数据交换格式。易于人阅读和编排。同时也便于机器分析和扭转。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1998的三个子集。 JSON接纳完全独立于言语的文本格式,但是也选择了看似于C语言宗族的习贯(包罗C, C++, C#, Java, JavaScript, Perl, Python等)。那么些特征使JSON成为优越的数据沟通语言。

mport (
  "encoding/json"
  "fmt"
  "reflect"
  "time"
)

type Persion struct {
  Id    int
  Name   string
  Address string
  Email  string
  School  string
  City   string
  Company string
  Age   int
  Sex   string
  Proviece string
  Com   string
  PostTo  string
  Buys   string
  Hos   string
}

func main() {
  StructToMapViaJson()
  //StructToMapViaReflect()
}

func StructToMapViaJson() {
  m := make(map[string]interface{})
  t := time.Now()
  person := Persion{
    Id:    98439,
    Name:   "zhaondifnei",
    Address: "大沙地",
    Email:  "dashdisnin@126.com",
    School:  "广州第十五中学",
    City:   "zhongguoguanzhou",
    Company: "sndifneinsifnienisn",
    Age:   23,
    Sex:   "F",
    Proviece: "jianxi",
    Com:   "广州兰博基尼",
    PostTo:  "蓝鲸XXXXXXXX",
    Buys:   "shensinfienisnfieni",
    Hos:   "zhonsndifneisnidnfie",
  }
  j, _ := json.Marshal(person)
  json.Unmarshal(j, &m)
  fmt.Println(m)
  fmt.Println(time.Now().Sub(t))
}

JSON构建于二种布局:

一、通过struct转json,json转成map

1、“名称/值”对的成团(A collection of name/value pairs)。分裂的语言中,它被理解为指标(object),纪录(record),构造(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),只怕关联数组 (associative array)。

func StructToMapViaJson() {
  m := make(map[string]interface{})
  t := time.Now()
  person := Persion{
    Id:    98439,
    Name:   "zhaondifnei",
    Address: "大沙地",
    Email:  "dashdisnin@126.com",
    School:  "广州第十五中学",
    City:   "zhongguoguanzhou",
    Company: "sndifneinsifnienisn",
    Age:   23,
    Sex:   "F",
    Proviece: "jianxi",
    Com:   "广州兰博基尼",
    PostTo:  "蓝鲸XXXXXXXX",
    Buys:   "shensinfienisnfieni",
    Hos:   "zhonsndifneisnidnfie",
  }
  j, _ := json.Marshal(person)
  json.Unmarshal(j, &m)
  fmt.Println(m)
  fmt.Printf("duration:%d", time.Now().Sub(t))
}

2、值的有种类表(An ordered list of values)。在大许多语言中,它被精晓为数组(array)。

output:
map[Proviece:jianxi Com:斯德哥尔摩Lamborghini Hos:zhonsndifneisnidnfie Name:zhaondifnei Company:sndifneinsifnienisn Buys:shensinfienisnfieni Age:23 PostTo:蓝鲸XXXXXXXX Address:大沙地 School:维也纳第第十五中学学City:zhongguoguanzhou Sex:F Id:98439 Email:dashdisnin@126.com]
duration:250467

那么些都以广大的数据布局。事实上海南大学学部分今世计算机语言都是某种格局支持它们。那使得豆蔻梢头种多少格式在雷同基于那个构造的编制程序语言之间交流到为恐怕。

二、通过反射方式生成map

JSON具有以下那么些情势:

func StructToMapViaReflect() {
  m := make(map[string]interface{})
  t := time.Now()
  person := Persion{
    Id:    98439,
    Name:   "zhaondifnei",
    Address: "大沙地",
    Email:  "dashdisnin@126.com",
    School:  "广州第十五中学",
    City:   "zhongguoguanzhou",
    Company: "sndifneinsifnienisn",
    Age:   23,
    Sex:   "F",
    Proviece: "jianxi",
    Com:   "广州兰博基尼",
    PostTo:  "蓝鲸XXXXXXXX",
    Buys:   "shensinfienisnfieni",
    Hos:   "zhonsndifneisnidnfie",
  }
  elem := reflect.ValueOf(&person).Elem()
  relType := elem.Type()
  for i := 0; i < relType.NumField(); i++ {
    m[relType.Field(i).Name] = elem.Field(i).Interface()
  }
  fmt.Println(m)
  fmt.Printf("duration:%d", time.Now().Sub(t))
}

•对象是二个冬日的“‘名称/值'对”集结。三个指标以“{”(左括号)开首,“}”(右括号)停止。每一种“名称”后跟多个“:”(冒号);“‘名称/值' 对”之间利用“,”(逗号)分隔。
•数组是值(value)的安如太山集中。贰个数组以“[”(左中括号)开端,“]”(右中括号)停止。值时期利用“,”(逗号)分隔。
•值(value)可以是双引号括起来的字符串(string)、数值(number卡塔尔(英语:State of Qatar)、true、false、 null、对象(object)大概数组(array)。那个组织得以嵌套。
•字符串(string)是由双引号包围的自便数量Unicode字符的汇聚,使用反斜线转义。叁个字符(character)即三个独自的字符串(character string)。
•字符串(string)与C只怕Java的字符串极其相符。
•数值(number)也与C也许Java的数值非常相同。除去未曾使用的八进制与十一进制格式。除去一些编码细节。
•空白能够插手到其余标志之间。 以下描述了豆蔻年华体化的言语。
JSON举例(javascript中使用json):

output:
map[Buys:shensinfienisnfieni Name:zhaondifnei City:zhongguoguanzhou Sex:F Proviece:jianxi Com:维也纳Lamborghini Id:98439 School:新德里第十五中学Address:大沙地 Age:23 PostTo:蓝鲸XXXXXXXX Hos:zhonsndifneisnidnfie Email:dashdisnin@126.com Company:sndifneinsifnienisn]
duration:104239

复制代码 代码如下:

结论

<script type="text/javascript">
var user =
          {
            "Id":1,
            "Name":"Hubery",
            "Age":23,
            "Address":
              {
                  "City":"Beijing","ZipCode":"111111"
              },
            "Email":"[email protected]"
          };