Commit 09d4bcf0 authored by Andrew Gerrand's avatar Andrew Gerrand

json: do not Marshal unexported struct fields

R=r, cw, niemeyer, rsc
CC=golang-dev
https://golang.org/cl/3952041
parent a41d8549
...@@ -270,6 +270,8 @@ type All struct { ...@@ -270,6 +270,8 @@ type All struct {
Interface interface{} Interface interface{}
PInterface *interface{} PInterface *interface{}
unexported int
} }
type Small struct { type Small struct {
......
...@@ -37,6 +37,7 @@ import ( ...@@ -37,6 +37,7 @@ import (
// a member of the object. By default the object's key name is the // a member of the object. By default the object's key name is the
// struct field name converted to lower case. If the struct field // struct field name converted to lower case. If the struct field
// has a tag, that tag will be used as the name instead. // has a tag, that tag will be used as the name instead.
// Only exported fields will be encoded.
// //
// Map values encode as JSON objects. // Map values encode as JSON objects.
// The map's key type must be string; the object keys are used directly // The map's key type must be string; the object keys are used directly
...@@ -219,11 +220,17 @@ func (e *encodeState) reflectValue(v reflect.Value) { ...@@ -219,11 +220,17 @@ func (e *encodeState) reflectValue(v reflect.Value) {
e.WriteByte('{') e.WriteByte('{')
t := v.Type().(*reflect.StructType) t := v.Type().(*reflect.StructType)
n := v.NumField() n := v.NumField()
first := true
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
if i > 0 { f := t.Field(i)
if f.PkgPath != "" {
continue
}
if first {
first = false
} else {
e.WriteByte(',') e.WriteByte(',')
} }
f := t.Field(i)
if f.Tag != "" { if f.Tag != "" {
e.string(f.Tag) e.string(f.Tag)
} else { } else {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment