func NestedStringSlice(obj map[string]interface{}, fields ...string) ([]string, bool) {
	val, ok := nestedFieldNoCopy(obj, fields...)
	if !ok {
		return nil, false
	}
	if m, ok := val.([]interface{}); ok {
		strSlice := make([]string, 0, len(m))
		for _, v := range m {
			if str, ok := v.(string); ok {
				strSlice = append(strSlice, str)
			} else {
				return nil, false
			}
		}
		return strSlice, true
	}
	return nil, false
}
NestedStringSlice returns a copy of []string value of a nested field.
Returns false if value is not found, is not a []interface{} or contains non-string items in the slice.
package unstructured
import (
	gojson "encoding/json"
	"errors"
	"fmt"
	"io"
	"strings"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"k8s.io/apimachinery/pkg/types"
	"k8s.io/apimachinery/pkg/util/json"
)
func NestedFieldCopy(obj map[string]interface{}, fields ...string) (interface{}, bool) {
	val, ok := nestedFieldNoCopy(obj, fields...)
	if !ok {
		return nil, false
	}
	return runtime.DeepCopyJSONValue(val), true
}
func nestedFieldNoCopy(obj map[string]interface{}, fields ...string) (interface{}, bool) {
	var val interface{} = obj
	for _, field := range fields {
		if m, ok := val.(map[string]interface{}); ok {
			val, ok = m[field]
			if !ok {
				return nil, false
			}
		} else {
			return nil, false
		}
	}
	return val, true
}
func NestedString(obj map[string]interface{}, fields ...string) (string, bool) {
	val, ok := nestedFieldNoCopy(obj, fields...)
	if !ok {
		return "", false
	}
	s, ok := val.(string)
	return s, ok
}
func NestedBool(obj map[string]interface{}, fields ...string) (bool, bool) {
	val, ok := nestedFieldNoCopy(obj, fields...)
	if !ok {
		return false, false
	}
	b, ok := val.(bool)
	return b, ok
}
func NestedFloat64(obj map[string]interface{}, fields ...string) (float64, bool) {
	val, ok := nestedFieldNoCopy(obj, fields...)
	if !ok {
		return 0, false
	}
	f, ok := val.(float64)
	return f, ok
}
func NestedInt64(obj map[string]interface{}, fields ...string) (int64, bool) {
	val, ok := nestedFieldNoCopy(obj, fields...)
	if !ok {
		return 0, false
	}
	i, ok := val.(int64)
	return i, ok
}