/** 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(); }
private static List<Var> parseVars(JsonObject obj) { if ( !obj.get(kVars).isArray() ) throw new ResultSetException("Key 'vars' must be a JSON array"); JsonArray a = obj.get(kVars).getAsArray(); Iterator<JsonValue> iter = a.iterator(); List<Var> vars = new ArrayList<>(); for ( ; iter.hasNext() ; ) { JsonValue v = iter.next(); if ( !v.isString() ) throw new ResultSetException("Entries in vars array must be strings"); Var var = Var.alloc(v.getAsString().value()); vars.add(var); } return vars; }
private List<Var> parseVars(JsonObject obj) { if ( ! obj.get(kVars).isArray() ) throw new ResultSetException("Key 'vars' must be a JSON array") ; JsonArray a = obj.get(kVars).getAsArray() ; Iterator<JsonValue> iter = a.iterator() ; List<Var> vars = new ArrayList<Var>() ; for ( ; iter.hasNext() ; ) { JsonValue v = iter.next() ; if ( ! v.isString() ) throw new ResultSetException("Entries in vars array must be strings") ; Var var = Var.alloc(v.getAsString().value()) ; vars.add(var) ; } return vars ; }
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 ; }
@Override public JsonArray execJson() { checkNotClosed(); HttpQuery httpQuery = makeHttpQuery(); httpQuery.setAccept(WebContent.contentTypeJSON); JsonArray result = new JsonArray(); try(InputStream in = httpQuery.exec()) { JsonValue v = JSON.parseAny(in); if ( ! v.isArray() ) throw new QueryExecException("Return from a JSON query isn't an array"); result = v.getAsArray(); } catch (IOException e) { IO.exception(e); } finally { this.close(); } return result; }
/** 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); }
links.add(head.get(kLink).getAsString().value()); } else { if ( !head.get(kLink).isArray() ) throw new ResultSetException("Key 'link' must have be an array: found: " + obj.get(kLink)); if ( !results.get(kBindings).isArray() ) throw new ResultSetException("'bindings' must be an array"); JsonArray array = results.get(kBindings).getAsArray();