เราสามารถใช้ฟังก์ชัน JsonPathเช่นsize()
หรือlength()
ดังนี้:
@Test
public void givenJson_whenGetLengthWithJsonPath_thenGetLength() {
String jsonString = "{'username':'jhon.user','email':'jhon@company.com','age':'28'}";
int length = JsonPath
.parse(jsonString)
.read("$.length()");
assertThat(length).isEqualTo(3);
}
หรือเพียงแค่แยกวิเคราะห์net.minidev.json.JSONObject
และรับขนาด:
@Test
public void givenJson_whenParseObject_thenGetSize() {
String jsonString = "{'username':'jhon.user','email':'jhon@company.com','age':'28'}";
JSONObject jsonObject = (JSONObject) JSONValue.parse(jsonString);
assertThat(jsonObject)
.size()
.isEqualTo(3);
}
แนวทางที่สองดูเหมือนจะทำงานได้ดีกว่าแนวทางแรก ฉันได้ทำการทดสอบประสิทธิภาพ JMH และได้ผลลัพธ์ดังต่อไปนี้:
| Benchmark | Mode | Cnt | Score | Error | Units |
|-------------------------------------------------|-------|-----|-------------|--------------|-------|
| JsonPathBenchmark.benchmarkJSONObjectParse | thrpt | 5 | 3241471.044 | ±1718855.506 | ops/s |
| JsonPathBenchmark.benchmarkJsonPathObjectLength | thrpt | 5 | 1680492.243 | ±132492.697 | ops/s |
โค้ดตัวอย่างที่สามารถพบได้ที่นี่
hamcrest-all
เป็นที่พึ่ง แต่ใช้hamcrest-library
: code.google.com/p/hamcrest/wiki/HamcrestDistributables