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