json解析异常怎么解决?json解析报错解决方法

JSON不仅在js中广泛使用,同时还在其他领域得到广泛使用,并且在实际工作中,我们也需要用json进行数据解析,可是如果遇到json解析异常要怎么解决呢?下面来我们就来给大家讲解一下。

一、问题由来

测试人员最近在测试时,后台日志一直抱错,大致意思是JSON数据解析错误,错误信息如下:

json解析异常怎么解决?json解析报错解决方法.png

二、问题分析

去查看代码时,发现异常信息是这里抛出来的,解析时使用的是json-lib这个包中的方法;

1.png

然后进一步排查错误,将里面的测试数据复制出来查看能否正常解析,如下:

2.png

结果还是不行,进一步排查发现问题,去掉最后一个解析的字段remarks后,解析正常;

3.png

由此找到问题的原因,是由于JSON数据中包含回车符\n,数据如下:

4.png

三、解决方案

原因找到后,就很好对症下药,针对上面的问题,在解析JSON数据时,先去除回车符\n即可。

5.png

修改后,发布到测试环境重新测试完全可行,问题解决。

json解析方法:

一、JSON解析之传统的JSON解析

1、生成json字符串

public static String createJsonString(String key, Object value)
{
    JSONObject jsonObject = new JSONObject();
    jsonObject.put(key, value);
    return jsonObject.toString();
}

2、解析JSON字符串:分为以下三种情况,一个JavaBean,一个List数组,一个嵌套Map的List数组

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
import com.android.myjson.domain.Person;
//完成对json数据的解析
public class JsonTools
{
    public static Person getPerson(String key, String jsonString)
    {
        Person person = new Person();
        try
        {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONObject personObject = jsonObject.getJSONObject("person");
            person.setId(personObject.getInt("id"));
            person.setName(personObject.getString("name"));
            person.setAddress(personObject.getString("address"));
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return person;
    }
    public static List getPersons(String key, String jsonString)
    {
        List list = new ArrayList();
        try
        {
            JSONObject jsonObject = new JSONObject(jsonString);
            // 返回json的数组
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++)
            {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Person person = new Person();
                person.setId(jsonObject2.getInt("id"));
                person.setName(jsonObject2.getString("name"));
                person.setAddress(jsonObject2.getString("address"));
                list.add(person);
            }
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return list;
    }
    public static List getList(String key, String jsonString)
    {
        List list = new ArrayList();
        try
        {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++)
            {
                String msg = jsonArray.getString(i);
                list.add(msg);
            }
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return list;
    }
    public static List > listKeyMaps(String key, String jsonString)
    {
        List > list = new ArrayList > ();
        try
        {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++)
            {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Map map = new HashMap();
                Iterator iterator = jsonObject2.keys();
                while (iterator.hasNext())
                {
                    String json_key = iterator.next();
                    Object json_value = jsonObject2.get(json_key);
                    if (json_value == null)
                    {
                        json_value = "";
                    }
                    map.put(json_key, json_value);
                }
                list.add(map);
            }
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return list;
    }
}

二、JSON解析之GSON

1、生成JSON字符串

import com.google.gson.Gson;
public class JsonUtils
{
    public static String createJsonObject(Object obj)
    {
        Gson gson = new Gson();
        String str = gson.toJson(obj);
        return str;
    }
}

2、解析JSON

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTools
{
    public GsonTools()
    {
        // TODO Auto-generated constructor stub
    }
    /**
    * @param
    * @param jsonString
    * @param cls
    * @return
    */
    public static T getPerson(String jsonString, Class cls)
    {
        T t = null;
        try
        {
            Gson gson = new Gson();
            t = gson.fromJson(jsonString, cls);
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return t;
    }
    /**
    * 使用Gson进行解析 List
    * @param
    * @param jsonString
    * @param cls
    * @return
    */
    public static List getPersons(String jsonString, Class cls)
    {
        List list = new ArrayList();
        try
        {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken > ()
            {}.getType());
        }
        catch (Exception e)
        {}
        return list;
    }
    /**
    * @param jsonString
    * @return
    */
    public static List getList(String jsonString)
    {
        List list = new ArrayList();
        try
        {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken > ()
            {}.getType());
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return list;
    }
    public static List > listKeyMaps(String jsonString)
    {
        List > list = new ArrayList > ();
        try
        {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString
                , new TypeToken >> ()
                {}.getType());
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return list;
    }
}

三、JSON解析之FastJSON

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
public class JsonTool
{
    public static T getPerson(String jsonstring, Class cls)
    {
        T t = null;
        try
        {
            t = JSON.parseObject(jsonstring, cls);
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return t;
    }
    public static List getPersonList(String jsonstring, Class cls)
    {
        List list = new ArrayList();
        try
        {
            list = JSON.parseArray(jsonstring, cls);
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return list;
    }
    public static List > getPersonListMap1(String jsonstring)
    {
        List > list = new ArrayList > ();
        try
        {
            list = JSON.parseObject(jsonstring
                , new TypeReference >> ()
                {}.getType());
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        return list;
    }
}

这就是json解析的几种方法了,总体来看,FastJson是效率最高的,大家可以使用这个方法去解析哦!最后大家如果想要了解更多json工具教程知识,敬请关注奇Q工具网。

推荐阅读:

java运行不了怎么办?java运行不了原因

ajax如何解决跨域请求?解决ajax跨域问题

java中接口可以继承类吗?java接口可以多继承吗?