aboutsummaryrefslogtreecommitdiff
path: root/vendor/k8s.io/apimachinery/pkg/util/json/json.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/k8s.io/apimachinery/pkg/util/json/json.go')
-rw-r--r--vendor/k8s.io/apimachinery/pkg/util/json/json.go33
1 files changed, 18 insertions, 15 deletions
diff --git a/vendor/k8s.io/apimachinery/pkg/util/json/json.go b/vendor/k8s.io/apimachinery/pkg/util/json/json.go
index 204834883..778e58f70 100644
--- a/vendor/k8s.io/apimachinery/pkg/util/json/json.go
+++ b/vendor/k8s.io/apimachinery/pkg/util/json/json.go
@@ -39,7 +39,8 @@ func Marshal(v interface{}) ([]byte, error) {
const maxDepth = 10000
// Unmarshal unmarshals the given data
-// If v is a *map[string]interface{}, numbers are converted to int64 or float64
+// If v is a *map[string]interface{}, *[]interface{}, or *interface{} numbers
+// are converted to int64 or float64
func Unmarshal(data []byte, v interface{}) error {
switch v := v.(type) {
case *map[string]interface{}:
@@ -52,7 +53,7 @@ func Unmarshal(data []byte, v interface{}) error {
return err
}
// If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64
- return convertMapNumbers(*v, 0)
+ return ConvertMapNumbers(*v, 0)
case *[]interface{}:
// Build a decoder from the given data
@@ -64,7 +65,7 @@ func Unmarshal(data []byte, v interface{}) error {
return err
}
// If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64
- return convertSliceNumbers(*v, 0)
+ return ConvertSliceNumbers(*v, 0)
case *interface{}:
// Build a decoder from the given data
@@ -76,29 +77,31 @@ func Unmarshal(data []byte, v interface{}) error {
return err
}
// If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64
- return convertInterfaceNumbers(v, 0)
+ return ConvertInterfaceNumbers(v, 0)
default:
return json.Unmarshal(data, v)
}
}
-func convertInterfaceNumbers(v *interface{}, depth int) error {
+// ConvertInterfaceNumbers converts any json.Number values to int64 or float64.
+// Values which are map[string]interface{} or []interface{} are recursively visited
+func ConvertInterfaceNumbers(v *interface{}, depth int) error {
var err error
switch v2 := (*v).(type) {
case json.Number:
*v, err = convertNumber(v2)
case map[string]interface{}:
- err = convertMapNumbers(v2, depth+1)
+ err = ConvertMapNumbers(v2, depth+1)
case []interface{}:
- err = convertSliceNumbers(v2, depth+1)
+ err = ConvertSliceNumbers(v2, depth+1)
}
return err
}
-// convertMapNumbers traverses the map, converting any json.Number values to int64 or float64.
+// ConvertMapNumbers traverses the map, converting any json.Number values to int64 or float64.
// values which are map[string]interface{} or []interface{} are recursively visited
-func convertMapNumbers(m map[string]interface{}, depth int) error {
+func ConvertMapNumbers(m map[string]interface{}, depth int) error {
if depth > maxDepth {
return fmt.Errorf("exceeded max depth of %d", maxDepth)
}
@@ -109,9 +112,9 @@ func convertMapNumbers(m map[string]interface{}, depth int) error {
case json.Number:
m[k], err = convertNumber(v)
case map[string]interface{}:
- err = convertMapNumbers(v, depth+1)
+ err = ConvertMapNumbers(v, depth+1)
case []interface{}:
- err = convertSliceNumbers(v, depth+1)
+ err = ConvertSliceNumbers(v, depth+1)
}
if err != nil {
return err
@@ -120,9 +123,9 @@ func convertMapNumbers(m map[string]interface{}, depth int) error {
return nil
}
-// convertSliceNumbers traverses the slice, converting any json.Number values to int64 or float64.
+// ConvertSliceNumbers traverses the slice, converting any json.Number values to int64 or float64.
// values which are map[string]interface{} or []interface{} are recursively visited
-func convertSliceNumbers(s []interface{}, depth int) error {
+func ConvertSliceNumbers(s []interface{}, depth int) error {
if depth > maxDepth {
return fmt.Errorf("exceeded max depth of %d", maxDepth)
}
@@ -133,9 +136,9 @@ func convertSliceNumbers(s []interface{}, depth int) error {
case json.Number:
s[i], err = convertNumber(v)
case map[string]interface{}:
- err = convertMapNumbers(v, depth+1)
+ err = ConvertMapNumbers(v, depth+1)
case []interface{}:
- err = convertSliceNumbers(v, depth+1)
+ err = ConvertSliceNumbers(v, depth+1)
}
if err != nil {
return err