笔者在Android开发中都是用的’Gson’进行的Json数据解析,但都说’FastJson’解析Json数据要比’Gson’快,笔者刚开始也是这么认为,至少它的名字中有’Fast’,所以笔者就在这里专门做了测试两者的解析性能
Gson版本:2.3.1
FastJson版本:1.1.43 android
项目 版本 GitHub Gson 2.3.1 https://github.com/google/gson FastJson 1.1.43 android https://github.com/alibaba/fastjson/wiki/Android%E7%89%88%E6%9C%AC
Test Jave Bean
//**中国区域级别Json数据JavaBean*/
public class AreasBean {
private String level;
private String parent_id;
private String name;
private String postcode;
private String id;
private List<AreasBean> subarea;
...get set...
}
Test Layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!--解析Json字符串至对象-->
<LinearLayout
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<Button
android:textAllCaps="false"
android:id="@+id/btn_testGsonParseJsonToObject"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="testGsonParseJsonToObject" />
<Button
android:textAllCaps="false"
android:id="@+id/btn_testFastJsonParseJsonToObject"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="testFastJsonParseJsonToObject" />
</LinearLayout> /<!--解析对象至Json字符串-->
<LinearLayout
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<Button
android:textAllCaps="false"
android:id="@+id/btn_testGsonParSEObjectToJson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="testGsonParSEObjectToJson" />
<Button
android:textAllCaps="false"
android:id="@+id/btn_testFastJsonParSEObjectToJson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="testFastJsonParSEObjectToJson" />
</LinearLayout> </LinearLayout>
Test Activity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static String areasJson = "";
private static List<AreasBean> areasBeans1;
private static List<AreasBean> areasBeans2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
areasJson = getString(R.string.json);
findViewById(R.id.btn_testGsonParseJsonToObject).setOnClickListener(this);
findViewById(R.id.btn_testFastJsonParseJsonToObject).setOnClickListener(this);
findViewById(R.id.btn_testGsonParSEObjectToJson).setOnClickListener(this);
findViewById(R.id.btn_testFastJsonParSEObjectToJson).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
/**测试Gson解析Json成对象*/
case R.id.btn_testGsonParseJsonToObject:
testGsonParseJsonToObject();
break;
/**测试FastJson解析Json成对象*/
case R.id.btn_testFastJsonParseJsonToObject:
testFastJsonParseJsonToObject();
break;
/**测试Gson解析对象成Json*/
case R.id.btn_testGsonParSEObjectToJson:
testGsonParSEObjectToJson();
break;
/**测试FastJson解析对象成Json*/
case R.id.btn_testFastJsonParSEObjectToJson:
testFastJsonParSEObjectToJson();
break;
}
}
//** * 测试用 Gson 解析 Json 数据成对象 */
private static void testGsonParseJsonToObject() {
final long time0 = System.currentTimeMillis();
Gson gson = new Gson();
final Type type = new TypeToken<List<AreasBean>>() {}.getType();
for (int i = 0; i < 10; i++) {
areasBeans1 = gson.fromJson(areasJson,type);
}
Log.d("Test Json","testGsonParseJsonToObject time = " + (System.currentTimeMillis() - time0));
}
//** * 测试用 FastJson 解析 Json 数据成对象 */
private static void testFastJsonParseJsonToObject() {
final long time0 = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
areasBeans2 = JSON.parseArray(areasJson,AreasBean.class);
}
Log.d("Test Json","testFastJsonParseJsonToObject time = " + (System.currentTimeMillis() - time0));
}
//** * 测试用 Gson 将对象解析 Json 数据 */
private static void testGsonParSEObjectToJson() {
final long time0 = System.currentTimeMillis();
String jsonString = new Gson().toJson(areasBeans1);
Log.d("Test Json","testGsonParSEObjectToJson time = " + (System.currentTimeMillis() - time0));
}
//** * 测试用 FastJson 将对象解析 Json 数据 */
private static void testFastJsonParSEObjectToJson(){
final long time0 = System.currentTimeMillis();
String jsonString = JSON.toJSONString(areasBeans2);
Log.d("Test Json","testFastJsonParSEObjectToJson time = " + (System.currentTimeMillis() - time0));
}
}
Test Result Log
Gson与FastJson分别解析Json到JaveBean所用时间对比
D/Test Json﹕ Gson:testGsonParseJsonToObect time = 222
D/Test Json﹕ FastJson:testFastJsonParseJsonToObect time = 283
D/Test Json﹕ Gson:testGsonParseJsonToObect time = 206
D/Test Json﹕ FastJson:testFastJsonParseJsonToObect time = 328
D/Test Json﹕ Gson:testGsonParseJsonToObect time = 207
D/Test Json﹕ FastJson:testFastJsonParseJsonToObect time = 295
结论:Gson解析比FastJson快Gson与FastJson分别循环10次解析Json到JaveBean所用时间对比
D/Test Json﹕ Gson:testGsonParseJsonToObject time = 2141
D/Test Json﹕ Gson:testGsonParseJsonToObject time = 2117
D/Test Json﹕ FastJson:testFastJsonParseJsonToObject time = 2841
D/Test Json﹕ FastJson:testFastJsonParseJsonToObject time = 2740
结论:Gson解析比FastJson快Gson与FastJson分别解析JaveBean到Json所用时间对比
D/Test Json﹕ testGsonParSEObjectToJson time = 306
D/Test Json﹕ testFastJsonParSEObjectToJson time = 231
D/Test Json﹕ testGsonParSEObjectToJson time = 207
D/Test Json﹕ testFastJsonParSEObjectToJson time = 227
D/Test Json﹕ testGsonParSEObjectToJson time = 200
D/Test Json﹕ testFastJsonParSEObjectToJson time = 237
D/Test Json﹕ testGsonParSEObjectToJson time = 194
D/Test Json﹕ testFastJsonParSEObjectToJson time = 238
D/Test Json﹕ testGsonParSEObjectToJson time = 196
D/Test Json﹕ testFastJsonParSEObjectToJson time = 229
D/Test Json﹕ testGsonParSEObjectToJson time = 189
D/Test Json﹕ testFastJsonParSEObjectToJson time = 228
D/Test Json﹕ testGsonParSEObjectToJson time = 189
D/Test Json﹕ testFastJsonParSEObjectToJson time = 228
D/Test Json﹕ testGsonParSEObjectToJson time = 190
D/Test Json﹕ testFastJsonParSEObjectToJson time = 236
结论:第一次调用方法FastJson比Gson解析快,但接着调用方法解析,Gson每次都要比FastJson快Gson与FastJson分别循环10次解析JaveBean到Json所用时间对比
D/Test Json﹕ Gson:testGsonParSEObectToJson time = 2138
D/Test Json﹕ FastJson:testFastJsonParSEObectToJson time = 2241
D/Test Json﹕ Gson:testGsonParSEObectToJson time = 2924
D/Test Json﹕ FastJson:testFastJsonParSEObectToJson time = 3246
结论:Gson比FastJson快
结论
经过上面的简单测试,FastJson并没有说的那么Fast,不过可能笔者单方面测试可能结果并不准确,但这在我们开发中的代码并无不同,所以说,在开发能满足我们需求的而速度快的还是Google的Gson解析要快《个人见解,如果测试方面有什么问题或意见,欢迎大家留言一起讨论》