什么JSON解析最简单?

时间:2017-04-24 17:13:51

标签: java json rest automated-tests unirest

例如,我有一些REST API测试任务。 我使用了Unirest框架,以及我有一些JSON提取器,

protected int extractStatus (HttpResponse<JsonNode> login) {
    return login.getStatus();
}

protected String extractError (HttpResponse<JsonNode> login) {
    return login.getBody().getObject()
            .getJSONObject("data")
            .getJSONObject("error")
            .toString();
}

protected String extractEmail (HttpResponse<JsonNode> login) {
    return login.getBody().getObject()
            .getJSONObject("data")
            .getJSONObject("result")
            .getJSONObject("userProfile")
            .getString("registrationEmail");
}

对于我的简单测试:

public class LoginJSON extends Request {

@Test
public void validLoginTest() {
    response = login("probe@grr.la", "9876541");
    Assert.assertEquals(200, extractStatus(response));
    Assert.assertNotNull("ID expected", extractId(response));
    Assert.assertNotNull("Token expected", extractToken(response));
    Assert.assertEquals("probe@grr.la", extractEmail(response));
    Assert.assertEquals("M", extractGender(response));
    Assert.assertEquals("EmailEnabled", true, extractEmailEnabled(response));
    Assert.assertEquals("EmailDisabled",false, extractEmailDisabled(response));
    Assert.assertEquals(2, extractRolesCount(response));
    Assert.assertTrue("User role expected", extractRoleByName(response, "ROLE_USER"));
    Assert.assertTrue("Admin role expected", extractRoleByName(response, "ROLE_ADMIN"));
}

也许有更简单的方法?

1 个答案:

答案 0 :(得分:1)

Try Gson with Retrofit!

HttpResponse<JsonNode> jsonResponse = request.asJson();
Gson gson = new Gson();
String responseJSONString = jsonResponse.getBody().toString();
MyResponseObject myObject = gson.fromJson(responseJSONString, MyResponseObject.class);

Classes

class MyResponseObject {
  @Serializable("data")
  private MyDataObject myData;
  #get set methods
}

class MyDataObject {
  @Serializable("result")
  private MyResultObject myResultObject;
  #get set methods
}

class MyResultObject {
  @Serializable("userProfile")
  private UserProfileDao userProfileDao;
  #get set methods
}

class UserProfileDao {
  @Serializable("registerationEmail")
  private String registerationEmail;

  #get set methods
}

You could do a try catch for successful parse or failed parse.