mirror of
https://github.com/ethauvin/JSON-java.git
synced 2025-06-17 07:50:52 -07:00
added builder class for JSONPointer, and implemented toString() and toURIFragment()
This commit is contained in:
parent
cbb1546c53
commit
d833c2d8de
1 changed files with 62 additions and 2 deletions
|
@ -5,6 +5,7 @@ import static java.util.Collections.emptyList;
|
|||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -38,7 +39,33 @@ SOFTWARE.
|
|||
*/
|
||||
public class JSONPointer {
|
||||
|
||||
private List<String> refTokens;
|
||||
private static final String ENCODING = "utf-8";
|
||||
|
||||
public static class Builder {
|
||||
|
||||
private final List<String> refTokens = new ArrayList<String>();
|
||||
|
||||
public Builder append(String token) {
|
||||
refTokens.add(token);
|
||||
return this;
|
||||
}
|
||||
|
||||
public JSONPointer build() {
|
||||
return new JSONPointer(refTokens);
|
||||
}
|
||||
|
||||
public Builder append(int arrayIndex) {
|
||||
refTokens.add(String.valueOf(arrayIndex));
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
private final List<String> refTokens;
|
||||
|
||||
/**
|
||||
* Pre-parses and initializes a new {@code JSONPointer} instance. If you want to
|
||||
|
@ -59,7 +86,7 @@ public class JSONPointer {
|
|||
if (pointer.startsWith("#/")) {
|
||||
pointer = pointer.substring(2);
|
||||
try {
|
||||
pointer = URLDecoder.decode(pointer, "utf-8");
|
||||
pointer = URLDecoder.decode(pointer, ENCODING);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -74,6 +101,10 @@ public class JSONPointer {
|
|||
}
|
||||
}
|
||||
|
||||
public JSONPointer(List<String> refTokens) {
|
||||
this.refTokens = refTokens;
|
||||
}
|
||||
|
||||
private String unescape(String token) {
|
||||
return token.replace("~1", "/").replace("~0", "~")
|
||||
.replace("\\\"", "\"")
|
||||
|
@ -122,4 +153,33 @@ public class JSONPointer {
|
|||
throw new JSONPointerException(format("%s is not an array index", indexToken), e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder rval = new StringBuilder("");
|
||||
for (String token: refTokens) {
|
||||
rval.append('/').append(escape(token));
|
||||
}
|
||||
return rval.toString();
|
||||
}
|
||||
|
||||
private String escape(String token) {
|
||||
return token.replace("~", "~0")
|
||||
.replace("/", "~1")
|
||||
.replace("\\", "\\\\")
|
||||
.replace("\"", "\\\"");
|
||||
}
|
||||
|
||||
public String toURIFragment() {
|
||||
try {
|
||||
StringBuilder rval = new StringBuilder("#");
|
||||
for (String token : refTokens) {
|
||||
rval.append('/').append(URLEncoder.encode(token, ENCODING));
|
||||
}
|
||||
return rval.toString();
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue