/** Create a safe copy of a {@link JsonValue}. * <p> * If the JsonValue is a structure (object or array), copy the structure recursively. * <p> * If the JsonValue is a primitive (string, number, boolean or null), * it is immutable so return the same object. */ public static JsonValue copy(JsonValue arg) { if ( ! arg.isArray() && ! arg.isObject() ) return arg; return createFrom(arg).build(); }
public static JsonValue accessPath(JsonValue obj, String... path) { for ( String p : path ) { if ( !obj.isObject() ) { throw new JsonException("Path traverses non-object") ; } obj = obj.getAsObject().get(p) ; } return obj ; }
public static JsonValue accessPath(JsonValue obj, String ... path) { for ( int i = 0 ; i < path.length ; i++ ) { String p = path[i] ; if ( ! obj.isObject() ) throw new JsonException("Path traverses non-object") ; obj = obj.getAsObject().get(p) ; } return obj ; }
@Override public Iterator<JsonObject> execJsonItems() { // Non-streaming. // TODO Integrate with the JSON parser to stream the results. JsonArray array = execJson().getAsArray(); List<JsonObject> x = new ArrayList<>(array.size()); array.forEach(elt->{ if ( ! elt.isObject()) throw new QueryExecException("Item in an array from a JSON query isn't an object"); x.add(elt.getAsObject()); }); return x.iterator(); }
private JsonObject rpc(String opName, JsonObject arg) { JsonValue r = rpcToValue(opName, arg); if ( ! r.isObject() ) throw new DeltaException("Bad result to '"+opName+"': "+JSON.toStringFlat(r)); return r.getAsObject(); }
private JsonObject rpcOnce(String opName, JsonObject arg) { JsonValue r = rpcOnceToValue(opName, arg); if ( ! r.isObject() ) throw new DeltaException("Bad result to '"+opName+"': "+JSON.toStringFlat(r)); return r.getAsObject(); }
private static boolean isCompactValue(JsonValue v) { if ( v.isPrimitive()) return true ; if ( v.isArray() ) { JsonArray a = v.getAsArray() ; if ( a.size() == 0 ) return true ; if ( a.size() > 1 ) return false ; return a.get(0).isPrimitive() ; } if ( v.isObject() ) { JsonObject obj = v.getAsObject() ; Set<String> x = obj.keySet() ; if ( x.size() == 0 ) return true ; if ( x.size() > 1 ) return false ; String k = obj.keys().iterator().next(); return obj.get(k).isPrimitive() ; } return false ; }
private static boolean isCompactValue(JsonValue v) { if ( v.isPrimitive()) return true ; if ( v.isArray() ) { JsonArray a = v.getAsArray() ; if ( a.size() == 0 ) return true ; if ( a.size() > 1 ) return false ; return a.get(0).isPrimitive() ; } if ( v.isObject() ) { JsonObject obj = v.getAsObject() ; Set<String> x = obj.keySet() ; if ( x.size() == 0 ) return true ; if ( x.size() > 1 ) return false ; String k = obj.keys().iterator().next(); return obj.get(k).isPrimitive() ; } return false ; }
public static JsonValue access(JsonValue obj, Object... path) { for ( Object p : path ) { if ( p instanceof String ) { if ( !obj.isObject() ) { throw new JsonException("Path traverses non-object") ; } obj = obj.getAsObject().get((String)p) ; } if ( p instanceof Integer ) { if ( !obj.isArray() ) { throw new JsonException("Path traverses non-array") ; } obj = obj.getAsArray().get((Integer)p) ; } } return obj ; }
public static JsonValue access(JsonValue obj, Object ... path) { for ( int i = 0 ; i < path.length ; i++ ) { Object p = path[i] ; if ( p instanceof String ) { if ( ! obj.isObject() ) throw new JsonException("Path traverses non-object") ; obj = obj.getAsObject().get((String)p) ; } if ( p instanceof Integer ) { if ( ! obj.isArray() ) throw new JsonException("Path traverses non-array") ; obj = obj.getAsArray().get((Integer)p) ; } } return obj ; }
if ( !obj.get(kHead).isObject() ) throw new ResultSetException("Key 'head' must have a JSON object as value: found: " + obj.get(kHead)); JsonObject head = obj.get(kHead).getAsObject(); BindingMap b = BindingFactory.create(); JsonValue v = iter.next(); if ( !v.isObject() ) throw new ResultSetException("Entry in 'bindings' array must be an object {}"); JsonObject x = v.getAsObject(); if ( !vt.isObject() ) throw new ResultSetException("Binding for variable '" + vn + "' is not a JSON object: " + vt); Node n = parseOneTerm(vt.getAsObject(), labelMap);
/** Create a builder from a {@link JsonValue}. * <p>If the argument is an object or array, use it to initialize the builder. * <p>If the argument is a JSON primitive (string, number, boolean or null), * <p>Otherwise thrown {@link IllegalArgumentException}. */ public static JsonBuilder createFrom(JsonValue arg) { if ( arg.isObject() ) { JsonObject obj = arg.getAsObject() ; JsonBuilder builder = JsonBuilder.create() ; builder.startObject() ; obj.forEach((k,v) -> builder.key(k).value(copy(v))) ; builder.finishObject() ; return builder ; } if ( arg.isArray() ) { JsonArray array = arg.getAsArray() ; JsonBuilder builder = JsonBuilder.create() ; builder.startArray() ; array.forEach((a)->builder.value(copy(a))) ; builder.finishArray() ; return builder ; } throw new IllegalArgumentException("Not a JSON object or JSON array; "+arg); }
/** Create a builder from a {@link JsonValue}. * <p>If the argument is an object or array, use it to initialize the builder. * <p>If the argument is a JSON primitive (string, number, boolean or null), * <p>Otherwise thrown {@link IllegalArgumentException}. */ public static JsonBuilder builder(JsonValue arg) { if ( arg.isObject() ) { JsonObject obj = arg.getAsObject() ; JsonBuilder builder = JsonBuilder.create() ; builder.startObject() ; obj.forEach((k,v) -> builder.key(k).value(copy(v))) ; builder.finishObject() ; return builder ; } if ( arg.isArray() ) { JsonArray array = arg.getAsArray() ; JsonBuilder builder = JsonBuilder.create() ; builder.startArray() ; array.forEach((a)->builder.value(copy(a))) ; builder.finishArray() ; return builder ; } throw new IllegalArgumentException("Not a JSON object or JSON array; "+arg); }
if ( ! obj.get(kHead).isObject() ) throw new ResultSetException("Key 'head' must have a JSON object as value: found: "+obj.get(kHead)) ; JsonObject head = obj.get(kHead).getAsObject() ; if ( ! v.isObject() ) throw new ResultSetException("Entry in 'bindings' array must be an object {}") ; JsonObject x = v.getAsObject() ; if ( ! vt.isObject() ) throw new ResultSetException("Binding for variable '"+vn+"' is not a JSON object: "+vt) ; Node n = parseOneTerm(vt.getAsObject()) ;