下面列出了android.util.JsonReader#skipValue ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@NonNull
private static CrashlyticsReport.FilesPayload.File parseFile(@NonNull JsonReader jsonReader)
throws IOException {
final CrashlyticsReport.FilesPayload.File.Builder builder =
CrashlyticsReport.FilesPayload.File.builder();
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
switch (name) {
case "filename":
builder.setFilename(jsonReader.nextString());
break;
case "contents":
builder.setContents(Base64.decode(jsonReader.nextString(), Base64.NO_WRAP));
break;
default:
jsonReader.skipValue();
break;
}
}
jsonReader.endObject();
return builder.build();
}
public static Map<String, Trie> loadCategoryMap(final JsonReader reader, final Map<String, Trie> categoryMap, final ListType listType) throws IOException {
reader.beginObject();
while (reader.hasNext()) {
final String name = reader.nextName();
if (name.equals("categories")) {
extractCategories(reader, categoryMap, listType);
} else {
reader.skipValue();
}
}
reader.endObject();
return categoryMap;
}
private void readImages(JsonReader jr) throws IOException {
int actualPage=0;
jr.beginObject();
while (jr.peek()!=JsonToken.END_OBJECT){
switch (jr.nextName()){
case "cover":
cover= new Page(ImageType.COVER,jr);
break;
case "pages":
jr.beginArray();
while(jr.hasNext())
pages.add(new Page(ImageType.PAGE,jr,actualPage++));
jr.endArray();
break;
case "thumbnail":
thumbnail= new Page(ImageType.THUMBNAIL,jr);
break;
default:
jr.skipValue();
break;
}
}
jr.endObject();
pages.trimToSize();
}
private static void readJsonQuestion(final JsonReader reader, final Question question) throws IOException {
reader.beginObject();
while (reader.hasNext()) {
final String name = reader.nextName();
switch (name) {
case "text":
question.setText(reader.nextString());
break;
case "title":
question.setTitle(reader.nextString());
break;
case "help":
question.setHelp(reader.nextString());
break;
case "answers":
readJsonAnswers(reader, question);
break;
case "checkboxes":
readJsonCheckboxes(reader, question);
break;
default:
reader.skipValue();
}
}
reader.endObject();
}
@Override
public void setCoordinatesFromJSONStream(JsonReader reader, int crs) throws IOException {
setCRS(crs);
reader.beginArray();
int pos = 0;
while (reader.hasNext()) {
if(pos == 0)
mX = reader.nextDouble();
else if(pos == 1)
mY = reader.nextDouble();
else
reader.skipValue();
pos++;
}
reader.endArray();
}
OpenHours readOpeningHours(JsonReader reader) throws IOException {
boolean openNow = false;
List<OpenPeriod> periods = null;
reader.beginObject();
while (reader.hasNext()) {
switch (reader.nextName()) {
case "open_now":
openNow = reader.nextBoolean();
break;
case "periods":
periods = readOpenPeriodsArray(reader);
break;
default:
reader.skipValue();
break;
}
}
reader.endObject();
return new OpenHours(openNow, periods);
}
public User(JsonReader reader) throws IOException {
reader.beginObject();
while(reader.peek()!= JsonToken.END_OBJECT){
switch (reader.nextName()){
case "id":id=reader.nextInt();break;
case "post_date":username=reader.nextString();break;
case "avatar_url":avatarUrl=reader.nextString();break;
default:reader.skipValue();break;
}
}
reader.endObject();
}
public Page(ImageType type, JsonReader reader,int page)throws IOException{
this.imageType=type;
this.page=page;
reader.beginObject();
while (reader.peek()!= JsonToken.END_OBJECT){
switch (reader.nextName()){
case "t":imageExt=stringToExt(reader.nextString()); break;
case "w":size.setWidth(reader.nextInt()); break;
case "h":size.setHeight(reader.nextInt()); break;
default:reader.skipValue();break;
}
}
reader.endObject();
}
List<AddressComponent> readAddressComponentsArray(JsonReader reader) throws IOException {
List<AddressComponent> addressComponents = new ArrayList<>();
reader.beginArray();
while (reader.hasNext()) {
String longName = null;
String shortName = null;
List<AddressComponentType> types = null;
reader.beginObject();
while (reader.hasNext()) {
switch (reader.nextName()) {
case "long_name":
longName = reader.nextString();
break;
case "short_name":
shortName = reader.nextString();
break;
case "types":
types = readAddressComponentTypesArray(reader);
break;
default:
reader.skipValue();
break;
}
}
reader.endObject();
addressComponents.add(new AddressComponent(longName, shortName, types));
}
reader.endArray();
return addressComponents;
}
public static List<Object> jsonStrToList(final String s) {
final ArrayList<Object> list = new ArrayList<>();
final JsonReader reader = new JsonReader(new StringReader(s));
try {
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
while (reader.hasNext()) {
final String name = reader.nextName();
if (name.equals(INTEGER_CLASS_NAME)) {
list.add(reader.nextInt());
} else if (name.equals(STRING_CLASS_NAME)) {
list.add(reader.nextString());
} else {
Log.w(TAG, "Invalid name: " + name);
reader.skipValue();
}
}
reader.endObject();
}
reader.endArray();
return list;
} catch (final IOException e) {
} finally {
close(reader);
}
return Collections.<Object>emptyList();
}
private void readJsonQuestions(final JsonReader reader) throws IOException {
reader.beginObject();
while (reader.hasNext()) {
final String questionId = reader.nextName();
final Question question = questionsMap.get(questionId);
if (question != null) {
readJsonQuestion(reader, question);
} else {
reader.skipValue();
}
}
reader.endObject();
}
List<AlternativePlaceId> readAltIdsArray(JsonReader reader) throws IOException {
List<AlternativePlaceId> altIds = new ArrayList<>();
reader.beginArray();
while (reader.hasNext()) {
String placeId = null;
PlaceScope scope = null;
reader.beginObject();
while (reader.hasNext()) {
switch (reader.nextName()) {
case "place_id":
placeId = reader.nextString();
break;
case "scope":
scope = readScope(reader);
break;
default:
reader.skipValue();
break;
}
}
reader.endObject();
altIds.add(new AlternativePlaceId(placeId, scope));
}
reader.endArray();
return altIds;
}
private List<Earthquake> parseJson(InputStream in) throws IOException {
// Create a new Json Reader to parse the input.
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
try {
// Create an empty list of earthquakes.
List<Earthquake> earthquakes = null;
// The root node of the Earthquake JSON feed is an object that
// we must parse.
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
// We are only interested in one sub-object: the array of
// earthquakes labeled as features.
if (name.equals("features")) {
earthquakes = readEarthquakeArray(reader);
} else {
// We will ignore all other root level values and objects.
reader.skipValue();
}
}
reader.endObject();
return earthquakes;
} finally {
reader.close();
}
}
public static boolean readGeoJSONCRS(InputStream is, Context context) throws IOException, NGException {
JsonReader reader = new JsonReader(new InputStreamReader(is, "UTF-8"));
boolean isWGS = true;
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if(name.equals(GeoConstants.GEOJSON_CRS)) {
reader.beginObject();
while (reader.hasNext()) {
name = reader.nextName();
if(name.equals(GeoConstants.GEOJSON_PROPERTIES)) {
reader.beginObject();
while (reader.hasNext()) {
String subname = reader.nextName();
if(subname.equals(GeoConstants.GEOJSON_NAME)){
String val = reader.nextString();
isWGS = checkCRSSupportAndWGS(val, context);
}
else {
reader.skipValue();
}
}
reader.endObject();
} else {
reader.skipValue();
}
}
reader.endObject();
} else {
reader.skipValue();
}
}
reader.endObject();
reader.close();
return isWGS;
}
@NonNull
private static CrashlyticsReport.Session.Application parseApp(@NonNull JsonReader jsonReader)
throws IOException {
final CrashlyticsReport.Session.Application.Builder builder =
CrashlyticsReport.Session.Application.builder();
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
switch (name) {
case "identifier":
builder.setIdentifier(jsonReader.nextString());
break;
case "version":
builder.setVersion(jsonReader.nextString());
break;
case "displayVersion":
builder.setDisplayVersion(jsonReader.nextString());
break;
case "installationUuid":
builder.setInstallationUuid(jsonReader.nextString());
break;
default:
jsonReader.skipValue();
break;
}
}
jsonReader.endObject();
return builder.build();
}
@NonNull
private static StickerPack readStickerPack(@NonNull JsonReader reader) throws IOException, IllegalStateException {
reader.beginObject();
String identifier = null;
String name = null;
String publisher = null;
String trayImageFile = null;
String publisherEmail = null;
String publisherWebsite = null;
String privacyPolicyWebsite = null;
String licenseAgreementWebsite = null;
String imageDataVersion = "";
boolean avoidCache = false;
List<Sticker> stickerList = null;
while (reader.hasNext()) {
String key = reader.nextName();
switch (key) {
case "identifier":
identifier = reader.nextString();
break;
case "name":
name = reader.nextString();
break;
case "publisher":
publisher = reader.nextString();
break;
case "tray_image_file":
trayImageFile = reader.nextString();
break;
case "publisher_email":
publisherEmail = reader.nextString();
break;
case "publisher_website":
publisherWebsite = reader.nextString();
break;
case "privacy_policy_website":
privacyPolicyWebsite = reader.nextString();
break;
case "license_agreement_website":
licenseAgreementWebsite = reader.nextString();
break;
case "stickers":
stickerList = readStickers(reader);
break;
case "image_data_version":
imageDataVersion = reader.nextString();
break;
case "avoid_cache":
avoidCache = reader.nextBoolean();
break;
default:
reader.skipValue();
}
}
if (TextUtils.isEmpty(identifier)) {
throw new IllegalStateException("identifier cannot be empty");
}
if (TextUtils.isEmpty(name)) {
throw new IllegalStateException("name cannot be empty");
}
if (TextUtils.isEmpty(publisher)) {
throw new IllegalStateException("publisher cannot be empty");
}
if (TextUtils.isEmpty(trayImageFile)) {
throw new IllegalStateException("tray_image_file cannot be empty");
}
if (stickerList == null || stickerList.size() == 0) {
throw new IllegalStateException("sticker list is empty");
}
if (identifier.contains("..") || identifier.contains("/")) {
throw new IllegalStateException("identifier should not contain .. or / to prevent directory traversal");
}
if (TextUtils.isEmpty(imageDataVersion)) {
throw new IllegalStateException("image_data_version should not be empty");
}
reader.endObject();
final StickerPack stickerPack = new StickerPack(identifier, name, publisher, trayImageFile, publisherEmail, publisherWebsite, privacyPolicyWebsite, licenseAgreementWebsite, imageDataVersion, avoidCache);
stickerPack.setStickers(stickerList);
return stickerPack;
}
private List<BackgroundLocation> readLocationsArray(JsonReader reader) throws IOException {
List<BackgroundLocation> locations = new ArrayList<BackgroundLocation>();
reader.beginArray();
while (reader.hasNext()) {
BackgroundLocation l = new BackgroundLocation();
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("id")) {
l.setLocationId(reader.nextLong());
} else if (name.equals("time")) {
l.setTime(reader.nextLong());
} else if (name.equals("latitude")) {
l.setLatitude(reader.nextDouble());
} else if (name.equals("longitude")) {
l.setLongitude(reader.nextDouble());
} else if (name.equals("accuracy")) {
l.setAccuracy((float)reader.nextDouble());
} else if (name.equals("speed")) {
l.setSpeed((float)reader.nextDouble());
} else if (name.equals("bearing")) {
l.setBearing((float)reader.nextDouble());
} else if (name.equals("altitude")) {
l.setAltitude(reader.nextDouble());
} else if (name.equals("radius")) {
JsonToken token = reader.peek();
if (token != JsonToken.NULL) {
l.setRadius((float)reader.nextDouble());
} else {
reader.skipValue();
}
} else if (name.equals("provider")) {
l.setProvider(reader.nextString());
} else if (name.equals("locationProvider")) {
l.setLocationProvider(reader.nextInt());
} else {
reader.skipValue();
}
}
reader.endObject();
locations.add(l);
}
reader.endArray();
return locations;
}
@NonNull
private static CrashlyticsReport.Session parseSession(@NonNull JsonReader jsonReader)
throws IOException {
final CrashlyticsReport.Session.Builder builder = CrashlyticsReport.Session.builder();
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
switch (name) {
case "generator":
builder.setGenerator(jsonReader.nextString());
break;
case "identifier":
builder.setIdentifierFromUtf8Bytes(
Base64.decode(jsonReader.nextString(), Base64.NO_WRAP));
break;
case "startedAt":
builder.setStartedAt(jsonReader.nextLong());
break;
case "endedAt":
builder.setEndedAt(jsonReader.nextLong());
break;
case "crashed":
builder.setCrashed(jsonReader.nextBoolean());
break;
case "user":
builder.setUser(parseUser(jsonReader));
break;
case "app":
builder.setApp(parseApp(jsonReader));
break;
case "os":
builder.setOs(parseOs(jsonReader));
break;
case "device":
builder.setDevice(parseDevice(jsonReader));
break;
case "events":
builder.setEvents(parseArray(jsonReader, CrashlyticsReportJsonTransform::parseEvent));
break;
case "generatorType":
builder.setGeneratorType(jsonReader.nextInt());
break;
default:
jsonReader.skipValue();
break;
}
}
jsonReader.endObject();
return builder.build();
}
private static void skipJoinSplits(JsonReader reader) throws IOException {
reader.skipValue();
}
public static XulDataNode buildFromJson(Reader reader) {
JsonReader jsonReader = new JsonReader(reader);
ArrayList<XulDataNode> parseStack = new ArrayList<XulDataNode>();
XulDataNode lastDataNode = null;
try {
JsonToken peek;
while ((peek = jsonReader.peek()) != JsonToken.END_DOCUMENT) {
switch (peek) {
case NAME:
String nameStr = jsonReader.nextName();
if (!jsonReader.hasNext()) {
continue;
}
switch ((peek = jsonReader.peek())) {
case BEGIN_OBJECT:
case BEGIN_ARRAY:
if (peek == JsonToken.BEGIN_OBJECT) {
jsonReader.beginObject();
} else {
jsonReader.beginArray();
}
lastDataNode = lastDataNode.appendChild(nameStr);
parseStack.add(lastDataNode);
break;
case STRING:
case NUMBER:
lastDataNode.setAttribute(nameStr, jsonReader.nextString());
break;
case BOOLEAN:
lastDataNode.setAttribute(nameStr, String.valueOf(jsonReader.nextBoolean()));
break;
case NULL:
jsonReader.nextNull();
lastDataNode.setAttribute(nameStr, null);
break;
}
break;
case BEGIN_OBJECT:
case BEGIN_ARRAY:
if (peek == JsonToken.BEGIN_OBJECT) {
jsonReader.beginObject();
} else {
jsonReader.beginArray();
}
if (lastDataNode != null) {
lastDataNode = lastDataNode.appendChild(String.valueOf(lastDataNode.size()));
} else {
lastDataNode = XulDataNode.obtainDataNode(null);
}
parseStack.add(lastDataNode);
break;
case END_OBJECT:
case END_ARRAY:
if (peek == JsonToken.END_OBJECT) {
jsonReader.endObject();
} else {
jsonReader.endArray();
}
parseStack.remove(parseStack.size() - 1);
if (!parseStack.isEmpty()) {
lastDataNode = parseStack.get(parseStack.size() - 1);
}
break;
default:
// array
switch (peek) {
case STRING:
case NUMBER:
lastDataNode.appendChild(String.valueOf(lastDataNode.size()), jsonReader.nextString());
break;
case BOOLEAN:
lastDataNode.appendChild(String.valueOf(lastDataNode.size()), String.valueOf(jsonReader.nextBoolean()));
break;
case NULL:
jsonReader.nextNull();
lastDataNode.appendChild(String.valueOf(lastDataNode.size()));
break;
default:
jsonReader.skipValue();
break;
}
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return lastDataNode;
}