JAVA中JSONObject

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中JSONObject相关的知识,希望对你有一定的参考价值。

在用json时发现两个JSONObject,org.json.simple.JSONObject和org.json.JSONObject,两者有什么优缺?
感谢1楼回答。这个测试我见过自己也试过,这个测不出,仔细追下代码会发现,两者的操作不一样的。new JSONObject(results.toString()); 和(JSONObject) JSONValue.parse(results.toString());

参考技术A private static String castToJson(Object obj)
if (obj == null)
return "null";
else if (obj instanceof Boolean)
return obj.toString();
else if (obj instanceof Integer || obj instanceof Long
|| obj instanceof Float || obj instanceof Double
|| obj instanceof Short || obj instanceof java.math.BigInteger
|| obj instanceof java.math.BigDecimal)
return obj.toString();
else if (obj instanceof String)
String v = (String) obj;
v = v.replaceAll("\\\\", "\\\\\\\\");
v = v.replaceAll("\n", "\\\\n");
v = v.replaceAll("\r", "\\\\r");
v = v.replaceAll("\"", "\\\\\"");
v = v.replaceAll("'", "\\\\\'");
return "\"" + v + "\"";
else if (obj instanceof java.sql.Date)
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(
"yyyy-MM-dd");
java.sql.Date v = (java.sql.Date) obj;
String s = df.format(new java.util.Date(v.getTime()));
return "\"" + s + "\"";
else if (obj instanceof java.util.Date)
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(
"yyyy-MM-dd");
java.util.Date v = (java.util.Date) obj;
String s = df.format(v);
return "\"" + s + "\"";
else if (obj instanceof java.sql.Timestamp)
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
java.sql.Timestamp v = (java.sql.Timestamp) obj;
String s = df.format(new java.util.Date(v.getTime()));
return "\"" + s + "\"";
else
return null;




还是用这个自己手都转看着放心,他们那个用着不舒服本回答被提问者采纳
参考技术B 测试方法:

//org.json

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

// TODO Auto-generated method stub

long in = Calendar.getInstance().getTimeInMillis();

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String reason = request.getParameter("reason");

try

for (int i = 0; i < 1000; i++)

JSONObject results = new JSONObject();

results.put("isSuccess", true);

results.put("reason", reason);

JSONObject r = new JSONObject(results.toString());

out.println(r.toString());



out.println(Calendar.getInstance().getTimeInMillis() - in);

out.close();

catch (JSONException e)

e.printStackTrace();





//json_simple-1.1

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

// TODO Auto-generated method stub

long in = Calendar.getInstance().getTimeInMillis();

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String reason = request.getParameter("reason");

for (int i = 0; i < 1000; i++)

JSONObject results = new JSONObject();

results.put("isSuccess", true);

results.put("reason", reason);

JSONObject r = (JSONObject) JSONValue.parse(results.toString());

out.println(r.toString());



out.println(Calendar.getInstance().getTimeInMillis() - in);

out.close();



/*测试结果:org.json输入10次,反应时间【16,31,31,31,31,31,31,32,32,31】

json_simple-1.1输入10次,反应时间【47,62,62,62,78,79,78,62,79,63】

测试结论:每次输入的reason参数都不一样,可以得出org.json性能在某些方面超过 json_simple

*/
参考技术C 将Java 集合转换成 json字符串

复制代码 代码如下:

Person p1=new Person();p1.setName("A1");p1.setAge(26);
Person p2=new Person();p2.setName("A2");p2.setAge(23);

List personList=new ArrayList<Person>();
personList.add(p1);
personList.add(p2);

Map personMap=new HashMap<String, Person>();
personMap.put("p1", p1);
personMap.put("p2", p2);

//["age":26,"name":"A1","age":23,"name":"A2"]
JSONArray.fromObject(personList).toString();
JSONSerializer.toJSON(personList)

//["p2":"name":"A2","age":23,"p1":"name":"A1","age":26]
JSONArray.fromObject(personMap).toString();
JSONSerializer.toJSON(personMap)

如何比较Java中JsonObject的空值

【中文标题】如何比较Java中JsonObject的空值【英文标题】:How to compare null value from the JsonObject in java 【发布时间】:2012-02-06 19:16:51 【问题描述】:

*** 成员我需要你的帮助。

我在下面给出了一个 JsonObject


"Id": null,
"Name": "New Task",
"StartDate": "2010-03-05T00:00:00",
"EndDate": "2010-03-06T00:00:00",
"Duration": 1,
"DurationUnit": "d",
"PercentDone": 60,
"ManuallyScheduled": false,
"Priority": 1,
"parentId": null,
"index": 2,
"depth": 1,
"checked": null 

我将 parentId 设为 null。我想将 parentId 值从 null 替换为 0。

我正在尝试使用下面提到的代码来做到这一点

if(jsonObject.get("parentId") == null || jsonObject.get("parentId") == "")
    
        System.out.println("inside null");
        jsonObject.put("parentId", 0);
    
    else
    
        System.out.println("inside else part");
        //jsonObject.put("parentId", jsonObject.getInt("parentId"));
        jsonObject.put("parentId", 0);
    

但它似乎不起作用。我在这里做错了什么。

【问题讨论】:

代码执行后json对象会发生什么? System.out.printlns 的输出是什么?是 JsonObject 要求还是只是您选择的 Json 解析器? 我没有得到任何输出。但在 if 条件之前,如果我将 System.out.println("JSON OBJECT VALUE FOR PARENTID ::"+jsonObject.get("parentId")); 我得到的打印输出值为 null 所以我想使用 if 条件检查它,但它总是只转到 else 部分。不知道这是什么问题 “我没有得到任何输出”你是什么意思?您可以从“then”案例或“else”案例中获取 println。 【参考方案1】:

使用JsonObject的以下方法检查任何键的值是否为空

public boolean isNull(java.lang.String key)

此方法用于根据任何键检查 Null 或该键是否没有值。

在documentation 中查看此内容

你的修改后的代码应该是这样的

if(jsonObject.isNull("parentId"))
    
        System.out.println("inside null");
        jsonObject.put("parentId", 0);
    
    else
    
        System.out.println("inside else part");
        //jsonObject.put("parentId", jsonObject.getInt("parentId"));
        jsonObject.put("parentId", 0);
    

【讨论】:

感谢您的回复,但我的 jsonlib-2.2.3.jar 中没有 isNull 方法声明。那么如何比较nll对象形式的json数据。 ?? 在jsonlib-2.2.3.jar中查看net.sf.json.util.JSONUtils类是否有isNull方法 是的.. rao 我使用 JSONUtils 类 boolean jsonUtils = JSONUtils.isNull(jsonObject.get("parentId")); 感谢您的支持 @RajeshPantula 这在json.simple.* 中不起作用json.simple 中使用什么【参考方案2】:

对于 2020 年使用 org.json.JSONObject 的任何人, 如果你有 "key":null

通过JSONObject.NULL检查key的值

JSONObject json = new JSONObject(""key":null");
Object value = json.get("key");
if (value == JSONObject.NULL)
  ...

【讨论】:

JSONObject.NULL 是我正在寻找的答案,谢谢。【参考方案3】:

这两种方法都有效

if( jsonObject.get("parentId").equals(null) )

if( jsonObject.isNull("parentId") )

因为JSONObject有自己的Null类,所以java原语null与JSONObject中的Null()不一样。

【讨论】:

【参考方案4】:

尝试使用下一个代码

int parentId = jsonObject.optInt("parentId", 0)

【讨论】:

【参考方案5】:

对于 com.google.gson.JsonObject,我遵循了这个:

boolean isIdNull = jsonObject.get("Id").isJsonNull();

在我的 json 中,我有:

"Id":null

【讨论】:

【参考方案6】:
if(jsonObject.isNull("parentId"))
    jsonObject.put("parentId", 0);

【讨论】:

这在json.simple.* 中不起作用json.simple 中使用什么【参考方案7】:

试试下面的代码。

if(jsonObject.isNull("parentId") || jsonObject.get("parentId").equals(""))

【讨论】:

这在json.simple.* 中不起作用json.simple 中使用什么

以上是关于JAVA中JSONObject的主要内容,如果未能解决你的问题,请参考以下文章

有关Java中json字符串与map的转换使用

Java爬虫实现京东物流查询

java根据经纬度获取地址

java解析json数据

JSON与Java对象的互相转换

java给对象按照字符串属性进行排序