qtjson解析非法值怎么处理?Json怎么解析?

阳光 2021-12-14 16:59:09 java常见问答 6269

JSON是一种很好的数据格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。但是如果我们遇到非法值需要解析要怎么处理呢?下面来我们就来给大家讲解一下。

json数据中的字符串含有引号和斜杠这些字符时需要转义,那么就会导致json解析出错,所以后端在返回之前最好进行转义或转unicode处理或者前端在解析json前先进行转义或转unicode处理。

示例:

function toUnicode(arg)
{
    var result = '';
    var character;
    for (var i = 0; i < arg.length; i++) p = ""
    {
        <= "" >
        character = arg.charCodeAt(i)
            .toString(16);
        switch (character.length)
        {
        case 1:
            character = '000' + character
            break;
        case 2:
            character = '00' + character
            break;
        case 3:
            character = '0' + character
            break;
        }
        result += '\\u' + character;
    }
    return result;
}
var a = 'sad\ndsa';
//JSON.parse('{"d":"'+a+'"}')//出错
JSON.parse('{"d":"' + toUnicode(a) + '"}')

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;
    }
}

二、解析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解析就是以上这三种方式,Json解析是把字符串重新变成json类型的对象,这样就能对里面的各种类型的属性或对象作操作了,并且在这几种方式中,FastJson是效率最高的,推荐使用。最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

java架构师要掌握哪些技术栈?java架构师必备技术栈

java gis开发框架有哪些?gis开发框架汇总

java水电费管理系统如何设计?java水电费管理系统设计