1. 不管golang从json文件读取数据,还是写数据到json配置文件,都需要encoding/json包,如下:import (
创新互联从2013年开始,是专业互联网技术服务公司,拥有项目成都网站设计、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元瑞金做网站,已为上家服务,为瑞金各地企业和个人服务,联系电话:18982081108
"encoding/json"
)
2. 编码JSON,输出数据到json文件,有方法如下:
json.Marshal(xxx) 和 json.MarshalIndent(c, "", " ") ,两个方法的区别是,MarshalIndent(c, "", " ")方法按照json格式 缩进,也就是美化了的 可读性很高的 带缩进的 Json数据。所以只要是json格式数据,当然用第二个方法啦。
3. 具体代码如下:
c := make(map[string]interface{})
c["name"] = "Gopher"
c["title"] = "programmer"
c["contact"] = map[string]interface{}{
"home": "415.333.3333",
"cell": "415.555.5555",
这个东西跟语言没关系,你要搞清楚http的流程,在你这种情况下,go语言写的程序是作为http server,jquery作为浏览器中运行的脚本,你可以使用jquery向服务器发送ajax请求,服务器返回json数据就可以了, http.Handle("/json", fooHandler)
http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "这里写上你的json数据就行了")
})
log.Fatal(http.ListenAndServe(":8080", nil))
对于jquery就
$.get("/test/json",function(m){alert(m);});
就可以了
需要写一个方法,把json数据转换成list集合数据
public static List jsonToBean(String data, Object bean) {
List list = new ArrayList();
try {
JSONArray array;
try {
array = new JSONArray(data);
for (int i = 0; i array.length(); i++) {
Object toBean = getBean(bean);
JSONObject ob = new JSONObject();
ob = (JSONObject) array.get(i);
toBean = jsonStrToBean(ob, toBean);
list.add(toBean);
}
return list;
} catch (JSONException e) {
try {
Object obj = null;
JSONObject jsonObj = new JSONObject(data);
Object toBean = getBean(bean);
toBean = jsonStrToBean(jsonObj, toBean);
list.add(toBean);
return list;
} catch (JSONException e1) {
log.error("Error covert String to JSONObject", e);
e1.printStackTrace();
}
e.printStackTrace();
log.error("Error covert String to JSONArray", e);
}
} catch (SecurityException e) {
e.printStackTrace();
}
return list;
}
如果你想输出的时间是YYYY-MM-DD的话
要在使用json数据化之前自己处理时间
type Article struct {
Id int
Title string
CreateTimeStr string
}
然后要将之前的时间转过来
Article.CreateTimeStr = Createdatetime.Format("2006-01-02")
最后序列化JSON就是YYYY-MM-DD
这是最简单的方法
golang对json序列化和反序列化的操作实在是难受,所以说用习惯了高级语言特性,再转到这些偏原生的写法上就会很难受。
不多BB,开始记录。
当写个小demo或者做个小工具,没有大规模使用场景,那使用哪个库都是一样的,因为性能的体现并不会很明显。但是如果是在实际项目中使用,且伴随着高并发,大容量等场景,我还是推荐使用 json-iterator 。
号称最快的go json解析器。跟官方的写法兼容,我目前基本都使用这个。
效率对比
ns 纳秒 op 操作
俩种方式,一种直接反序列化成 结构体数组,另一种反序列化为 slice,内容为map[string]interface{}
结构体数组
slice
json是一种经常使用的数据格式,下面总结一下json的使用
json与struct转换的话struct的属性必须首字母大写。
当用的多了就会发现一个致命的问题:go默认会将特殊字符转义采用以下方法可以解决:
处理方法1
处理方法2
不管是属性组成的还是Tag组成的json字符串,都可以正常的解析
tag:
json:"-" // 表示不进行序列化
IsOnSale bool json:"is_on_sale,string" //序列化后转成string
ProductID int64 json:"product_id,omitempty" //为零值时忽略
序列化或者反序列化时可以指定类型,支持string,number和boolean
IsOnSale bool json:"is_on_sale,string"
注意:
正确使用第一个,第二个回报错