mirror of
https://github.com/fankes/moshi.git
synced 2025-10-18 23:49:21 +08:00
Document @Json and @JsonQualifier in the README.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Square, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.squareup.moshi.recipes;
|
||||
|
||||
import com.squareup.moshi.JsonAdapter;
|
||||
import com.squareup.moshi.Moshi;
|
||||
import com.squareup.moshi.recipes.models.Player;
|
||||
|
||||
public final class CustomFieldName {
|
||||
public void run() throws Exception {
|
||||
String json = ""
|
||||
+ "{"
|
||||
+ " \"username\": \"jesse\","
|
||||
+ " \"lucky number\": 32"
|
||||
+ "}\n";
|
||||
|
||||
Moshi moshi = new Moshi.Builder().build();
|
||||
JsonAdapter<Player> jsonAdapter = moshi.adapter(Player.class);
|
||||
|
||||
Player player = jsonAdapter.fromJson(json);
|
||||
System.out.println(player);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
new CustomFieldName().run();
|
||||
}
|
||||
}
|
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Square, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.squareup.moshi.recipes;
|
||||
|
||||
import com.squareup.moshi.FromJson;
|
||||
import com.squareup.moshi.JsonAdapter;
|
||||
import com.squareup.moshi.JsonQualifier;
|
||||
import com.squareup.moshi.Moshi;
|
||||
import com.squareup.moshi.ToJson;
|
||||
import java.lang.annotation.Retention;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
public final class CustomQualifier {
|
||||
public void run() throws Exception {
|
||||
String json = ""
|
||||
+ "{\n"
|
||||
+ " \"color\": \"#ff0000\",\n"
|
||||
+ " \"height\": 768,\n"
|
||||
+ " \"width\": 1024\n"
|
||||
+ "}\n";
|
||||
|
||||
Moshi moshi = new Moshi.Builder()
|
||||
.add(new ColorAdapter())
|
||||
.build();
|
||||
JsonAdapter<Rectangle> jsonAdapter = moshi.adapter(Rectangle.class);
|
||||
|
||||
Rectangle rectangle = jsonAdapter.fromJson(json);
|
||||
System.out.println(rectangle);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
new CustomQualifier().run();
|
||||
}
|
||||
|
||||
static class Rectangle {
|
||||
int width;
|
||||
int height;
|
||||
@HexColor int color;
|
||||
|
||||
@Override public String toString() {
|
||||
return String.format("%dx%d #%06x", width, height, color);
|
||||
}
|
||||
}
|
||||
|
||||
@Retention(RUNTIME)
|
||||
@JsonQualifier
|
||||
public @interface HexColor {
|
||||
}
|
||||
|
||||
static class ColorAdapter {
|
||||
@ToJson String toJson(@HexColor int rgb) {
|
||||
return String.format("#%06x", rgb);
|
||||
}
|
||||
|
||||
@FromJson @HexColor int fromJson(String rgb) {
|
||||
return Integer.parseInt(rgb.substring(1), 16);
|
||||
}
|
||||
}
|
||||
}
|
@@ -21,70 +21,61 @@ import com.squareup.moshi.Moshi;
|
||||
import com.squareup.moshi.ToJson;
|
||||
|
||||
public final class FromJsonWithoutStrings {
|
||||
public void run() throws Exception {
|
||||
// For some reason our JSON has date and time as separate fields. We will clean that up during
|
||||
// parsing: Moshi will first parse the JSON directly to an EventJson and from that the
|
||||
// EventJsonAdapter will create the actual Event.
|
||||
String json = ""
|
||||
+ "{\n"
|
||||
+ " \"title\": \"Blackjack tournament\",\n"
|
||||
+ " \"begin_date\": \"20151010\",\n"
|
||||
+ " \"begin_time\": \"17:04\"\n"
|
||||
+ "}\n";
|
||||
|
||||
public void run() throws Exception {
|
||||
// for some reason our JSON has date and time as separate fields -
|
||||
// we will clean that up during parsing: Moshi will first parse
|
||||
// the JSON directly to an EventJson and from that the EventJsonAdapter
|
||||
// will create the actual Event
|
||||
String json = ""
|
||||
+ "{\n"
|
||||
+ " \"title\": \"Blackjack tournament\",\n"
|
||||
+ " \"begin_date\": \"20151010\",\n"
|
||||
+ " \"begin_time\": \"17:04\"\n"
|
||||
+ "}\n";
|
||||
Moshi moshi = new Moshi.Builder().add(new EventJsonAdapter()).build();
|
||||
JsonAdapter<Event> jsonAdapter = moshi.adapter(Event.class);
|
||||
|
||||
Moshi moshi = new Moshi.Builder()
|
||||
.add(new EventJsonAdapter())
|
||||
.build();
|
||||
JsonAdapter<Event> jsonAdapter = moshi.adapter(Event.class);
|
||||
Event event = jsonAdapter.fromJson(json);
|
||||
System.out.println(event);
|
||||
System.out.println(jsonAdapter.toJson(event));
|
||||
}
|
||||
|
||||
Event event = jsonAdapter.fromJson(json);
|
||||
System.out.println(event);
|
||||
System.out.println(jsonAdapter.toJson(event));
|
||||
public static void main(String[] args) throws Exception {
|
||||
new FromJsonWithoutStrings().run();
|
||||
}
|
||||
|
||||
private static final class EventJson {
|
||||
String title;
|
||||
String begin_date;
|
||||
String begin_time;
|
||||
}
|
||||
|
||||
public static final class Event {
|
||||
String title;
|
||||
String beginDateAndTime;
|
||||
|
||||
@Override public String toString() {
|
||||
return "Event{" +
|
||||
"title='" + title + '\'' +
|
||||
", beginDateAndTime='" + beginDateAndTime + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
private static final class EventJsonAdapter {
|
||||
@FromJson Event eventFromJson(EventJson eventJson) {
|
||||
Event event = new Event();
|
||||
event.title = eventJson.title;
|
||||
event.beginDateAndTime = eventJson.begin_date + " " + eventJson.begin_time;
|
||||
return event;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
new FromJsonWithoutStrings().run();
|
||||
}
|
||||
|
||||
private static final class EventJson {
|
||||
String title;
|
||||
String begin_date;
|
||||
String begin_time;
|
||||
}
|
||||
|
||||
public static final class Event {
|
||||
String title;
|
||||
String beginDateAndTime;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Event{" +
|
||||
"title='" + title + '\'' +
|
||||
", beginDateAndTime='" + beginDateAndTime + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
private static final class EventJsonAdapter {
|
||||
|
||||
@FromJson
|
||||
Event eventFromJson(EventJson eventJson) {
|
||||
Event event = new Event();
|
||||
event.title = eventJson.title;
|
||||
event.beginDateAndTime = eventJson.begin_date + " " + eventJson.begin_time;
|
||||
return event;
|
||||
}
|
||||
|
||||
@ToJson
|
||||
EventJson eventToJson(Event event) {
|
||||
EventJson json = new EventJson();
|
||||
json.title = event.title;
|
||||
json.begin_date = event.beginDateAndTime.substring(0, 8);
|
||||
json.begin_time = event.beginDateAndTime.substring(9, 14);
|
||||
return json;
|
||||
}
|
||||
|
||||
@ToJson EventJson eventToJson(Event event) {
|
||||
EventJson json = new EventJson();
|
||||
json.title = event.title;
|
||||
json.begin_date = event.beginDateAndTime.substring(0, 8);
|
||||
json.begin_time = event.beginDateAndTime.substring(9, 14);
|
||||
return json;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Square, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.squareup.moshi.recipes.models;
|
||||
|
||||
import com.squareup.moshi.Json;
|
||||
|
||||
public final class Player {
|
||||
public final String username;
|
||||
public final @Json(name = "lucky number") int luckyNumber;
|
||||
|
||||
public Player(String username, int luckyNumber) {
|
||||
this.username = username;
|
||||
this.luckyNumber = luckyNumber;
|
||||
}
|
||||
|
||||
@Override public String toString() {
|
||||
return username + " gets lucky with " + luckyNumber;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user