Browse Source

Merge

pull/1/head
U-SWNA\dbaldwin100 14 years ago
parent
commit
cd6be3b405
  1. 7
      json-path/src/main/java/com/jayway/jsonpath/JsonPath.java
  2. 57
      json-path/src/main/java/com/jayway/jsonpath/filter/FilterOutput.java
  3. 6
      json-path/src/main/java/com/jayway/jsonpath/filter/JsonPathFilterBase.java
  4. 10
      json-path/src/main/java/com/jayway/jsonpath/filter/JsonPathFilterChain.java
  5. 34
      json-path/src/main/java/com/jayway/jsonpath/filter/ListIndexFilter.java
  6. 48
      json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java

7
json-path/src/main/java/com/jayway/jsonpath/JsonPath.java

@ -11,6 +11,7 @@ import com.jayway.jsonpath.json.JsonParser;
import java.io.IOException;
import java.util.List;
import java.util.logging.Logger;
import net.minidev.json.parser.ParseException;
@ -132,12 +133,8 @@ public class JsonPath {
*/
public JsonElement read(JsonElement json) throws JsonException {
FilterOutput filterOutput = filters.filter(json);
if (filterOutput == null || filterOutput.getResult() == null) {
return null;
}
return filterOutput.getResult();
return filterOutput.getResultAsJson();
}

57
json-path/src/main/java/com/jayway/jsonpath/filter/FilterOutput.java

@ -7,6 +7,7 @@ import com.jayway.jsonpath.json.JsonArray;
import com.jayway.jsonpath.json.JsonElement;
import com.jayway.jsonpath.json.JsonException;
import com.jayway.jsonpath.json.JsonFactory;
import com.jayway.jsonpath.json.JsonPathResultList;
import static java.lang.String.format;
@ -15,51 +16,39 @@ import static java.lang.String.format;
* Date: 2/9/11
* Time: 12:28 PM
*/
public class FilterOutput {
public class FilterOutput extends ArrayList<JsonElement> {
private final List<JsonElement> result;
public FilterOutput(JsonElement root) {
this.result = new ArrayList<JsonElement>();
result.add(root);
super();
this.add(root);
}
public FilterOutput(){
super();
}
public FilterOutput(List<JsonElement> result) {
this.result = result;
}
public FilterOutput() {
this.result = new ArrayList<JsonElement>();
public JsonArray getResultAsJsonArray() throws JsonException {
return this.get(0).toJsonArray();
}
public JsonElement getResult() throws JsonException {
if(result.size()==0){
return null;
public JsonElement getResultAsJson() throws JsonException {
if(this.size()>1){
JsonArray ja = JsonFactory.getInstance().createJsonArray();
for(JsonElement je:this){
ja.add(je);
}
return ja;
}
else if(this.size()==1){
return this.get(0);
}
else if(result.size()==1){
return result.get(0);
}
else{
JsonFactory fact = JsonFactory.getInstance();
JsonArray ja = fact.createJsonArray();
for(JsonElement ele:result)
ja.add(ele);
return ja;
return JsonFactory.getInstance().createJsonNull(null, null);
}
}
public JsonArray getResultAsList() throws JsonException {
return getResult().toJsonArray();
}
public List<JsonElement> getList() throws JsonException {
return result;
}

6
json-path/src/main/java/com/jayway/jsonpath/filter/JsonPathFilterBase.java

@ -14,13 +14,13 @@ import com.jayway.jsonpath.json.JsonException;
*/
public abstract class JsonPathFilterBase {
public FilterOutput apply(FilterOutput element) throws JsonException{
List<JsonElement> result = new ArrayList<JsonElement>();
for(JsonElement el : element.getList()){
FilterOutput result = new FilterOutput();
for(JsonElement el : element){
List<JsonElement> out = apply(el);
if(out != null)
result.addAll(out);
}
return new FilterOutput(result);
return result;
}
public abstract List<JsonElement> apply(JsonElement element) throws JsonException;
public abstract String getPathSegment() throws JsonException;;

10
json-path/src/main/java/com/jayway/jsonpath/filter/JsonPathFilterChain.java

@ -43,17 +43,17 @@ public class JsonPathFilterChain {
public FilterOutput filter(JsonElement root) throws JsonException {
FilterOutput out = new FilterOutput(root);
log.info(out.getResult().toString());
log.info(out.getResultAsJson().toString());
for (JsonPathFilterBase filter : filters) {
if (filter == null) {
throw new InvalidPathException();
}
if(out.getList() == null){
return null;
if(out.getResultAsJson().isJsonNull()){
break;
}
out = filter.apply(out);
if(out.getResult()!=null)
log.info(out.getResult().toString());
log.info(out.getResultAsJson().toString());
}

34
json-path/src/main/java/com/jayway/jsonpath/filter/ListIndexFilter.java

@ -3,10 +3,12 @@ package com.jayway.jsonpath.filter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import com.google.gson.JsonNull;
import com.jayway.jsonpath.json.JsonArray;
import com.jayway.jsonpath.json.JsonElement;
import com.jayway.jsonpath.json.JsonException;
@ -35,19 +37,31 @@ public class ListIndexFilter extends JsonPathFilterBase {
@Override
public List<JsonElement> apply(JsonElement element) throws JsonException {
List<JsonElement> result = new ArrayList<JsonElement>();
Integer[] index = getArrayIndex();
if(element.isJsonArray()){
for (int i : index) {
if (indexIsInRange(element.toJsonArray(), i)) {
result.add(element.toJsonArray().get(i));
}
}
}
ArrayList<JsonElement> result = new ArrayList<JsonElement>();
filterRange(result,element,index);
return result;
}
private <T extends Collection> void filterRange(T result,JsonElement element,Integer[] index) throws JsonException{
if(element.isJsonArray()){
for (int i : index) {
if (indexIsInRange(element.toJsonArray(), i)) {
result.add(element.toJsonArray().get(i));
}
else{
com.jayway.jsonpath.json.JsonNull jn = factory.createJsonNull(i,element);
result.add(jn);
}
}
}
}
private boolean indexIsInRange(List list, int index) {

48
json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java

@ -4,6 +4,7 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import com.google.gson.JsonNull;
import com.jayway.jsonpath.json.JsonArray;
import com.jayway.jsonpath.json.JsonElement;
import com.jayway.jsonpath.json.JsonException;
@ -65,17 +66,19 @@ public abstract class JsonPathTest {
" }\n" +
"}";
protected JsonFactory factory = null;
@Before
public void init_factory(){
}
@Test
public void bracket_notation_can_be_used_in_path() throws Exception {
}
assertEquals("new", JsonPath.read(DOCUMENT, "$.['store'].bicycle.['dot.notation']"));
assertEquals("new", JsonPath.read(DOCUMENT, "$['store']['bicycle']['dot.notation']"));
assertEquals("new", JsonPath.read(DOCUMENT, "$.['store']['bicycle']['dot.notation']"));
assertEquals("new", JsonPath.read(DOCUMENT, "$.['store'].['bicycle'].['dot.notation']"));
assertEquals(w("new"), JsonPath.read(DOCUMENT, "$.['store'].bicycle.['dot.notation']"));
assertEquals(w("new"), JsonPath.read(DOCUMENT, "$['store']['bicycle']['dot.notation']"));
assertEquals(w("new"), JsonPath.read(DOCUMENT, "$.['store']['bicycle']['dot.notation']"));
assertEquals(w("new"), JsonPath.read(DOCUMENT, "$.['store'].['bicycle'].['dot.notation']"));
}
@Test
@ -89,17 +92,25 @@ public abstract class JsonPathTest {
@Test
public void read_path_with_colon() throws Exception {
assertEquals(JsonPath.read(DOCUMENT, "$.store.bicycle.foo:bar"), "fooBar");
assertEquals(JsonPath.read(DOCUMENT, "$.['store'].['bicycle'].['foo:bar']"), "fooBar");
assertEquals(JsonPath.read(DOCUMENT, "$.store.bicycle.foo:bar").toObject(), "fooBar");
assertEquals(JsonPath.read(DOCUMENT, "$.['store'].['bicycle'].['foo:bar']").toObject(), "fooBar");
assertEquals(JsonPath.read(DOCUMENT, "$.store.bicycle.foo:bar"), "fooBar");
assertEquals(JsonPath.read(DOCUMENT, "$['store']['bicycle']['foo:bar']"), "fooBar");
assertEquals(JsonPath.read(DOCUMENT, "$.store.bicycle.foo:bar"), w("fooBar"));
assertEquals(JsonPath.read(DOCUMENT, "$.['store'].['bicycle'].['foo:bar']"), w("fooBar"));
}
private JsonElement w(Object obj) throws JsonException {
return factory.createJsonPrimitive(obj);
}
private JsonElement[] w(Object ... objs) throws JsonException {
JsonElement je[]= new JsonElement[objs.length];
for(int i=0;i<objs.length;i++){
je[i] = w(objs[i]);
}
return je;
}
@Test
public void parent_ref() throws Exception {
@ -138,7 +149,7 @@ public abstract class JsonPathTest {
String doc = "{foo:{biz:{id:1}}}";
assertEquals(JsonPath.read(doc, "$.foo.biz.(object)").toString(), "{\"id\":1}");
assertEquals(JsonPath.read(doc, "$.foo.biz.(collection)"), null);
assertTrue(JsonPath.read(doc, "$.foo.biz.(collection)").isJsonNull());
doc = "{foo:{biz:[{Id:1},{Id:2},{Id:4,foo:1234}]}}";
@ -277,16 +288,17 @@ public abstract class JsonPathTest {
@Test
public void access_index_out_of_bounds_does_not_throw_exception() throws Exception {
Object res = JsonPath.read(DOCUMENT, "$.store.book[100].author");
JsonElement res = JsonPath.read(DOCUMENT, "$.store.book[100].author");
assertNull(res);
assertTrue(res.isJsonNull());
JsonElement res2 = JsonPath.read(DOCUMENT, "$.store.book[1, 200].author");
JsonElement res3 = JsonPath.read(DOCUMENT, "$.store.book[1, 200]");
assertEquals(res2.toObject(), "Evelyn Waugh");
System.out.println(res3.toJsonArray().get(1));
assertThat((List<String>)res, hasItems("Evelyn Waugh"));
assertEquals(res2.toObject(), "Evelyn Waugh");
assertThat((List<String>) res, hasItems("Evelyn Waugh"));
//assertNull(();
}

Loading…
Cancel
Save