Gson与FastJson解析性能分析

前端之家收集整理的这篇文章主要介绍了Gson与FastJson解析性能分析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@

笔者在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

  1. //**中国区域级别Json数据JavaBean*/
  2. public class AreasBean {
  3. private String level;
  4. private String parent_id;
  5. private String name;
  6. private String postcode;
  7. private String id;
  8. private List<AreasBean> subarea;
  9. ...get set...
  10. }

Test Layout

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context=".MainActivity">
  7. <!--解析Json字符串至对象-->
  8. <LinearLayout
  9. android:gravity="center"
  10. android:layout_width="match_parent"
  11. android:layout_height="0dp"
  12. android:layout_weight="1"
  13. android:orientation="vertical">
  14. <Button
  15. android:textAllCaps="false"
  16. android:id="@+id/btn_testGsonParseJsonToObject"
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content"
  19. android:text="testGsonParseJsonToObject" />
  20. <Button
  21. android:textAllCaps="false"
  22. android:id="@+id/btn_testFastJsonParseJsonToObject"
  23. android:layout_width="match_parent"
  24. android:layout_height="wrap_content"
  25. android:text="testFastJsonParseJsonToObject" />
  26. </LinearLayout> /<!--解析对象至Json字符串-->
  27. <LinearLayout
  28. android:gravity="center"
  29. android:layout_width="match_parent"
  30. android:layout_height="0dp"
  31. android:layout_weight="1"
  32. android:orientation="vertical">
  33. <Button
  34. android:textAllCaps="false"
  35. android:id="@+id/btn_testGsonParSEObjectToJson"
  36. android:layout_width="match_parent"
  37. android:layout_height="wrap_content"
  38. android:text="testGsonParSEObjectToJson" />
  39. <Button
  40. android:textAllCaps="false"
  41. android:id="@+id/btn_testFastJsonParSEObjectToJson"
  42. android:layout_width="match_parent"
  43. android:layout_height="wrap_content"
  44. android:text="testFastJsonParSEObjectToJson" />
  45. </LinearLayout> </LinearLayout>
@H_404_1@

Test Activity

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  2. private static String areasJson = "";
  3. private static List<AreasBean> areasBeans1;
  4. private static List<AreasBean> areasBeans2;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. areasJson = getString(R.string.json);
  10. findViewById(R.id.btn_testGsonParseJsonToObject).setOnClickListener(this);
  11. findViewById(R.id.btn_testFastJsonParseJsonToObject).setOnClickListener(this);
  12. findViewById(R.id.btn_testGsonParSEObjectToJson).setOnClickListener(this);
  13. findViewById(R.id.btn_testFastJsonParSEObjectToJson).setOnClickListener(this);
  14. }
  15. @Override
  16. public void onClick(View v) {
  17. switch (v.getId()) {
  18. /**测试Gson解析Json成对象*/
  19. case R.id.btn_testGsonParseJsonToObject:
  20. testGsonParseJsonToObject();
  21. break;
  22. /**测试FastJson解析Json成对象*/
  23. case R.id.btn_testFastJsonParseJsonToObject:
  24. testFastJsonParseJsonToObject();
  25. break;
  26. /**测试Gson解析对象成Json*/
  27. case R.id.btn_testGsonParSEObjectToJson:
  28. testGsonParSEObjectToJson();
  29. break;
  30. /**测试FastJson解析对象成Json*/
  31. case R.id.btn_testFastJsonParSEObjectToJson:
  32. testFastJsonParSEObjectToJson();
  33. break;
  34. }
  35. }
  36. //** * 测试用 Gson 解析 Json 数据成对象 */
  37. private static void testGsonParseJsonToObject() {
  38. final long time0 = System.currentTimeMillis();
  39. Gson gson = new Gson();
  40. final Type type = new TypeToken<List<AreasBean>>() {}.getType();
  41. for (int i = 0; i < 10; i++) {
  42. areasBeans1 = gson.fromJson(areasJson,type);
  43. }
  44. Log.d("Test Json","testGsonParseJsonToObject time = " + (System.currentTimeMillis() - time0));
  45. }
  46. //** * 测试用 FastJson 解析 Json 数据成对象 */
  47. private static void testFastJsonParseJsonToObject() {
  48. final long time0 = System.currentTimeMillis();
  49. for (int i = 0; i < 10; i++) {
  50. areasBeans2 = JSON.parseArray(areasJson,AreasBean.class);
  51. }
  52. Log.d("Test Json","testFastJsonParseJsonToObject time = " + (System.currentTimeMillis() - time0));
  53. }
  54. //** * 测试用 Gson 将对象解析 Json 数据 */
  55. private static void testGsonParSEObjectToJson() {
  56. final long time0 = System.currentTimeMillis();
  57. String jsonString = new Gson().toJson(areasBeans1);
  58. Log.d("Test Json","testGsonParSEObjectToJson time = " + (System.currentTimeMillis() - time0));
  59. }
  60. //** * 测试用 FastJson 将对象解析 Json 数据 */
  61. private static void testFastJsonParSEObjectToJson(){
  62. final long time0 = System.currentTimeMillis();
  63. String jsonString = JSON.toJSONString(areasBeans2);
  64. Log.d("Test Json","testFastJsonParSEObjectToJson time = " + (System.currentTimeMillis() - time0));
  65. }
  66. }

Test Result Log

@H_404_1@

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解析要快《个人见解,如果测试方面有什么问题或意见,欢迎大家留言一起讨论》

猜你在找的Json相关文章