getString()
和optString()
JSON有什么区别?
我需要在我的应用程序中进行一些简单的JSON解析,Douglas Crockford库似乎正是我需要的.
但是,我似乎遇到了一个问题.我收到以下错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/json/JSONObject : Unsupported major.minor version 52.0
我google了一下,我得到的印象是这是由于某些版本不兼容.我试过改变Java版本,但它似乎没有帮助.我在我的程序中使用Java 7和Java 7功能,最终我想使用Java 7.
我该如何解决这个问题?
PS:我看过杰克逊和GSON,绝对不想使用任何一个,所以请不要建议替代.
有没有办法克隆一个实例org.json.JSONObject
而不对其进行字符串化并重新分析结果?
浅拷贝是可以接受的.
我有一个从服务器返回的响应,我期待一个String值,所以我写这个来解析它
public String getMessageFromServer(JSONObject response) {
String msg = response.getString("message");
return msg;
}
Run Code Online (Sandbox Code Playgroud)
然后,当我在我的代码中使用它并null
从服务器获取值时,函数不返回null
,而是返回"null"
.
我看过这个错误报告,但我没有看到解决方案.
编辑:
我有一个很小的黑客来解决这个问题,但它很难看,我正在寻找一个更好的解决方案:
public String getMessageFromServer(JSONObject response) {
Object msg = response.get("message");
if(msg == null) {
return null;
}
return (String) msg;
}
Run Code Online (Sandbox Code Playgroud)
编辑#2:
多年以后,回到这个问题,我看到我在这里并没有完全错误,并且JSONObject
有一个内置的方法.
从a获取可选值的方法JSONObject
是使用此方法 JSONObject.optString("message", DEF_VALUE);
我正在尝试解析服务器的输出,如下所示:
{
"GetFolderFilesByZoneResult": [
{
"ID": 98748,
"CreatedBy": "",
"UpdatedBy": "none",
"CreatedDate": "\/Date(1308273033620+0100)\/",
"UpdatedDate": "\/Date(1308303003770+0100)\/",
"CommentCount": 0,
"Key": "",
"Enabled": true,
"MimeType": "video",
"Votes": 2,
"TotalRating": 0,
"AllowComments": true,
"ViewCount": 323,
"ReleaseDate": "\/Date(1308273000000+0100)\/",
"ExpireDate": "\/Date(4102444800000+0000)\/",
"Author": "",
"Size": 133799936,
"Tag1": "",
"Tag2": "",
"Tag3": "",
"RecycleBin": false
},
{
"ID": 99107,
"CreatedBy": "",
"UpdatedBy": "none",
"CreatedDate": "\/Date(1308583412520+0100)\/",
"UpdatedDate": "\/Date(1308583564007+0100)\/",
"CommentCount": 0,
"Key": "",
"Enabled": true,
"MimeType": "video",
"Votes": 0,
"TotalRating": 0,
"AllowComments": true,
"ViewCount": 33,
"ReleaseDate": "\/Date(1308583380000+0100)\/",
"ExpireDate": "\/Date(4102444800000+0000)\/",
"Author": …
Run Code Online (Sandbox Code Playgroud) 我有这样的课:
public class Class1 {
private String result;
private String ip;
private ArrayList<Class2> alarm;
}
Run Code Online (Sandbox Code Playgroud)
警报它的类是这样的:
public class Class2 {
private String bla;
private String bla1;
}
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法将orl.json的Class1实例转换为JSON对象?
我正在开发一个使用该org.json.JSONObject
包的Java项目.但是,每当我在eclipse中使用它时,它都说没有找到这样的包.然而,当我在android上开发即在eclipse中创建一个新的Android项目时,我可以在不做任何事情的情况下使用它(不添加外部JAR和东西),所以我很确定所需的JAR在我的机器上.
但是,在我的整个文件系统上搜索"org.json","*json*jar","json*jar"并没有返回任何内容.
我正在使用依赖的开源库org.json:json:20090211
.显然20090211
,Android和版本之间存在一些API差异.当我启用ProGuard最小化时,我看到此警告:
警告:com.esri.core.geometry.JSONObjectEnumerator:在库类org.json.JSONObject中找不到引用的方法'java.lang.String [] getNames(org.json.JSONObject)'
该方法存在于当前的参考实现中JSONObject
,因此我假设它在版本之前的某个时间添加20090211
,而不是在它之后删除,这意味着Android中包含的版本较旧.我想对这个版本进行区分,20090211
看看需要做些什么才能使依赖于20090211
与Android兼容的库.
Android中包含哪个版本的org.json?
(我知道我可以重命名org.json
并将依赖项更改为重命名的版本,但是如果可能的话我想避免这种情况.这样的更改不太可能被上游接受.)
我刚刚编写了一个双精度值数组JsonObject
.但是,当我打印它时,我的所有double值都会转换为int值.谁能帮我理解背后发生的事情?请让我知道放置原始数组的最佳方法JsonObject
public class JsonPrimitiveArrays {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
double[] d = new double[]{1.0,2.0,3.0};
jsonObject.put("doubles",d);
System.out.println(jsonObject);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
{ "双打":[1,2,3]}
之前已经提出过这个问题,但是我无法从对这些问题的回答中找出我的代码中的错误.
我试图将java字符串转换为json对象.这是代码:
import org.json.JSONObject;
//Other lines of code
URL seatURL = new URL("http://freemusicarchive.org/api/get/genres.json?api_key=60BLHNQCAOUFPIBZ&limit=2");
//Return the JSON Response from the API
BufferedReader br = new BufferedReader(new InputStreamReader(seatURL.openStream(),Charset.forName("UTF-8")));
String readAPIResponse = " ";
StringBuilder jsonString = new StringBuilder();
while((readAPIResponse = br.readLine()) != null){
jsonString.append(readAPIResponse);
}
JSONObject jsonObj = new JSONObject(jsonString);
System.out.println(jsonString);
System.out.println("---------------------------");
System.out.println(jsonObj);
Run Code Online (Sandbox Code Playgroud)
输出是:
{"title":"Free Music Archive - Genres","message":"","errors":[],"total":"163","total_pages":82,"page":1,"limit":"2","dataset":[{"genre_id":"1","genre_parent_id":"38","genre_title":"Avant-Garde","genre_handle":"Avant-Garde","genre_color":"#006666"},{"genre_id":"2","genre_parent_id":null,"genre_title":"International","genre_handle":"International","genre_color":"#CC3300"}]}
---------------------------
{}
Run Code Online (Sandbox Code Playgroud)
所以,正如你所看到的,jsonstring正在获取数据,但jsonObj却没有.我正在使用org.json JAR.