Moshi is a modern JSON library for Android and Java. It makes it easy to parse JSON into Java objects:
Download the jar or dependancy via Maven:
<dependency>
<groupId>com.squareup.moshi</groupId>
<artifactId>moshi</artifactId>
<version>1.5.0</version>
</dependency>
or Gradle:
compile 'com.squareup.moshi:moshi:1.5.0'
String json = ...;
Moshi moshi = new Moshi.Builder().build();
JsonAdapter<BlackjackHand> jsonAdapter = moshi.adapter(BlackjackHand.class);
BlackjackHand blackjackHand = jsonAdapter.fromJson(json);
System.out.println(blackjackHand);
And it can just as easily serialize Java objects as JSON:
BlackjackHand blackjackHand = new BlackjackHand(
new Card('6', SPADES),
Arrays.asList(new Card('4', CLUBS), new Card('A', HEARTS)));
Moshi moshi = new Moshi.Builder().build();
JsonAdapter<BlackjackHand> jsonAdapter = moshi.adapter(BlackjackHand.class);
String json = jsonAdapter.toJson(blackjackHand);
Built in support Adapter :
Moshi has built-in support for reading and writing Java’s core data types:
- Primitives (int, float, char…) and their boxed counterparts (Integer, Float, Character…).
- Arrays, Collections, Lists, Sets, and Maps
- Strings
- Enums
It supports your model classes by writing them out field-by-field.
In the example above Moshi uses these classes:
class BlackjackHand {
public final Card hidden_card;
public final List<Card> visible_cards;
...
}
class Card {
public final char rank;
public final Suit suit;
...
}
enum Suit {
CLUBS, DIAMONDS, HEARTS, SPADES;
}
to read and write this JSON:
{
"hidden_card": {
"rank": "6",
"suit": "SPADES"
},
"visible_cards": [
{
"rank": "4",
"suit": "CLUBS"
},
{
"rank": "A",
"suit": "HEARTS"
}
]
}