在本文中,我们将带你了解Android2.3解析json出错在这篇文章中,我们将为您详细介绍Android2.3解析json出错的方方面面,并解答android解析json常见的疑惑,同时我们还将给您
在本文中,我们将带你了解Android2.3解析json出错在这篇文章中,我们将为您详细介绍Android2.3解析json出错的方方面面,并解答android 解析json常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的android Gson解析JSON格式、android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组、android – 用GSON解析JSON、android – 用gson解析JSON对象。
本文目录一览:- Android2.3解析json出错(android 解析json)
- android Gson解析JSON格式
- android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组
- android – 用GSON解析JSON
- android – 用gson解析JSON对象
Android2.3解析json出错(android 解析json)
在android2.3上json出现此问题,提示错误“JSONException: Value of type java.lang.String cannot be converted to JSONObject”,而4.0上没问题。
部分错误log如下:
1
12
-
18
20
:
23
:
27.389
: W
/
System.err(
12927
): org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject
2
12
-
18
20
:
23
:
27.389
: W
/
System.err(
12927
): at org.json.JSON.typeMismatch(JSON.java:
107
)
3
12
-
18
20
:
23
:
27.389
: W
/
System.err(
12927
): at org.json.JSONObject.
<
init
>
(JSONObject.java:
158
)
4
12
-
18
20
:
23
:
27.389
: W
/
System.err(
12927
): at org.json.JSONObject.
<
init
>
(JSONObject.java:
171
)
原因是服务器返回的数据UTF-8带有BOM头,含有BOM头的数据会多出来三个字节 efbbbf。
这样在解析json的时候就会有问题,android4.0对此已经做了处理,所以没有报错。
1
//
android 2.3
2
public
JSONTokener(String in) {
3
this
.in
=
in;
4
}
5
6
//
android 4.0
7
public
JSONTokener(String in) {
8
//
consume an optional byte order mark (BOM) if it exists
9
if
(in
!=
null
&&
in.startsWith(
"
\ufeff
"
)) {
10
in
=
in.substring(
1
);
11
}
12
this
.in
=
in;
13
}
参考资料:
JSONException: Value of type java.lang.String cannot be converted to JSONObject http://hi.baidu.com/wuuubo/item/761f10134f771ef087ad4e93
UTF-8文件的BOM头的来由及去除方法
Android 由于BOM头导致的Json解析出错 http://blog.sina.com.cn/s/blog_783ede0301016zdb.htmlandroid Gson解析JSON格式
Gson的使用会让json格式解析变的非常简单和高效。
第一步:增加Gson依赖
implementation 'com.solidfire.code.gson:gson:2.6.2'
第二步:安装GsonFormat插件快速解析实体类
安装插件的步骤可以查看https://www.jianshu.com/p/6a389ef8a665
json范例:{students:[{name:‘小名’,age:25},{name:‘阿名’,age:26}],classX:‘大班’}
使用插件解析的实体类
package com.example.lc.mydemo.bean;
import java.util.List;
public class Student {
/**
* students : [{"name":"小名","age":25},{"name":"阿名","age":26}]
* class : 大班
*/
private String classX;
private List<StudentsBean> students;
public String getClassX() {
return classX;
}
public void setClassX(String classX) {
this.classX = classX;
}
public List<StudentsBean> getStudents() {
return students;
}
public void setStudents(List<StudentsBean> students) {
this.students = students;
}
public static class StudentsBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
第三步:解析JSON
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String Data = "{students:[{name:'小名',age:25},{name:'阿名',age:26}],classX:'大班'}";
Gson gson = new Gson();
Student b = gson.fromJson(Data,Student.class);
Log.e(TAG, "onCreate: "+b.getClassX());
List<Student.StudentsBean> list=b.getStudents();
int count=list.size();
for(int i=0;i<count;i++){
Log.e(TAG, "onCreate: "+list.get(i).getName());
}
}
解析结果:
E/MainActivity: onCreate: 大班
E/MainActivity: onCreate: 小名
E/MainActivity: onCreate: 阿名
android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组
我正在解析这个url,我有一个例外,不知道如何跳过它……我只需要获得100个最受欢迎的应用程序的名称.有一个关键的“im:name”,里面有一个键“lebel”,但是我认为它是无效的JsonArray,所以我需要找到通过键“im:name”获取名字的方法…有smb任何想法我该如何解决这个问题?
这是我的AsyncTask.class
public class AsyncTaskParseJson extends AsyncTask<String, String, String> {
String jsonStringUrl = "https://itunes.apple.com/br/RSS/topfreeapplications/limit=100/json";
JSONArray dataJsonArr = null;
@Override
protected void onPreExecute() {}
@Override
protected String doInBackground(String... arg0) {
try {
// instantiate our json parser
JsonParser jParser = new JsonParser();
// get json string from url
JSONObject json = jParser.getJSONFromUrl(jsonStringUrl);
// get the array of users
//HERE I NEED TO CHANGE SOMETHING
dataJsonArr = json.getJSONArray("Feed"); // probably wrong
// loop through all users
for (int i = 0; i < dataJsonArr.length(); i++) {
JSONObject c = dataJsonArr.getJSONObject(i);
// Storing each json item in variable
String name = c.getString("im:name");//probably wrong
}
} catch (JSONException e) {
e.printstacktrace();
}
return null;
}
}
这是日志
09-10 20:04:03.013 18211-18241/com.yuretsrodik.top100apps E/JsonParser.java﹕ Error parsing data org.json.JSONException: Unterminated array at character 115 of {"Feed":{"author":{"name":{"label":"iTunes Store"}, "uri":{"label":"http://www.apple.com/br/itunes/"}}, "entry":[n{"im:name":{"label":"Messenger"}, "im:image":[n{"label":"http://a474.phobos.apple.com/us/r30/Purple4/v4/78/1f/f9/781ff9ea-bf94-5309-4c32-4b901279e54a/mzl.rairyzma.53x53-50.png", "attributes":{"height":"53"}}, n{"label":"http://a990.phobos.apple.com/us/r30/Purple4/v4/78/1f/f9/781ff9ea-bf94-5309-4c32-4b901279e54a/mzl.rairyzma.75x75-65.png", "attributes":{"height":"75"}}, n{"label":"http://a1675.phobos.apple.com/us/r30/Purple4/v4/78/1f/f9/781ff9ea-bf94-5309-4c32-4b901279e54a/mzl.rairyzma.100x100-75.png", "attributes":{"height":"100"}}], "summary":{"label":"lcance instantaneamente as pessoas na sua vida, gratuitamente. O Messenger é como mensagens de texto, mas você não precisa pagar por cada mensagem (funciona com o seu plano de dados). \n\nNão é só para amigos no Facebook: envie mensagens para as pessoas na sua agenda de contatos e basta inserir um número de telefone para adicionar um novo contato.\n\nBate-papos em grupo: crie grupos para as pessoas a quem você mais envia mensagens. Dê um nome a eles, defina fotos para o grupo e os mantenha em um só lugar.\n\nFotos e vÃdeos: grave vÃdeos e tire selfies ou outras fotos diretamente do aplicativo e envie-os com um toque.\n\nLigações gratuitas: fale por quanto tempo quiser, mesmo com pessoas em outros paÃses. (Ligações são gratuitas somente através do Wi-Fi. Do contrário, cobranças de dados padrão são aplicáveis).\n\nMais formas de enviar mensagens: \nDê vida à s suas conversas com as figurinhas. \nVeja uma prévia das suas fotos e vÃdeos no rolo da câmera sem sair da conversa, e escolha as melhores para enviar.\nGrave mensagens de voz quando tiver mais para dizer\n\nRecursos adicionais:\nSaiba quando as pessoas viram suas mensagens.\nEncaminhe mensagens ou fotos para as pessoas que não estavam na conversa.\nProcure pessoas e grupos para entrar em contato com eles rapidamente.\nAtive a localização para que as pessoas saibam que você está nas imediações.\nVeja quem está disponÃvel no Messenger e quem está on-line no Facebook. \nDesative as notificações quando você estiver trabalhando, dormindo ou se precisar dar um tempo.\nFique conectado para nunca perder uma mensagem."}, "im:price":{"label":"Grátis", "attributes":{"amount":"0.00000", "currency":"USD"}}, "im:contentType":{"attributes":{"term":"Application", "label":"Aplicativo"}}, "rights":{"label":"© Facebook, Inc."}, "title":{"label":"Messenger - Facebook, Inc."}, "link":{"attributes":{"rel":"alternate", "type":"text/html", "href":"https://itunes.apple.com/br/app/messenger/id454638411?mt=8&uo=2"}}, "id":{"label":"https://itunes.apple.com/br/app/messenger/id454638411?mt=8&uo=2", "attributes":{"im:id":"454638411", "im:bundleId":"com.facebook.Messenger"}}, "im:artist":{"label":"Facebook, Inc.", "attributes":{"href":"https://itunes.apple.com/br/artist/facebook-inc./id284882218?mt=8&uo=2"}}, "category":{"attributes":{"im:id":"6005", "term":"Social Networking", "scheme":"https://itunes.apple.com/br/genre/ios-redes-sociais/id6005?mt=8&uo=2", "label":"Redes sociais"}}, "im:releaseDate":{"label":"2011-10-19T15:39:30-07:00", "attributes":{"label":"19/10/2011"}}}, n{"im:name":{"label":"WhatsApp Messenger"}, "im:image":[n{"label":"http://a1554.phobos.apple.com/us/r30/Purple1/v4/1f/94/ff/1f94ffd9-159e-a247-2c0f-059f86b6c6c9/mzl.ivmblqpq.53x53-50.png", "attributes":{"height":"53"}}, n{"label":"http://a422.phobos.apple.com/us/r30/Purple1/v4/1f/94/ff/1f94ffd9-159e-a247-2c0f-059f86b6c6c9/mzl.ivmblqpq.75x75-65.png", "attributes":{"height":"75"}}, n{"label":"http://a1251.phobos.apple.com/us/r30/Purple1/v4/1f/94/ff/1f94ffd9-159e-a247-2c0f-059f86b6c6c9/mzl.ivmblqpq.100x100-75.png", "attributes":{"height":"100"}}], "summary":{"label":"O WhatsApp Messenger é um mensageiro para smartphone
09-10 20:04:03.013 18211-18241/com.yuretsrodik.top100apps W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x42044e48)
09-10 20:04:03.023 18211-18241/com.yuretsrodik.top100apps E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.yuretsrodik.top100apps, PID: 18211
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.yuretsrodik.top100apps.AsyncTaskParseJson.doInBackground(AsyncTaskParseJson.java:32)
at com.yuretsrodik.top100apps.AsyncTaskParseJson.doInBackground(AsyncTaskParseJson.java:10)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
将非常非常感谢帮助!!因为我真的堆叠(
解决方法:
首先,您进行调用将结果转换为名为json的字符串.
然后你必须将字符串转换为Json对象
String json = null;
JSONObject jsonObj = null; JSONObject FeedsObject = null;
json = jParser.getJSONFromUrl(jsonStringUrl);
if (json != null) {
try {
jsonObj = new JSONObject(json);
FeedObject = jsonObj.getJSONObject("Feed");
为了更好地理解,请访问http://json.parser.online.fr/beta/并在那里粘贴您的json数据.
在右边你有一个设置按钮—>显示类型
您可以找到对象,字符串和数组
见下图.你试图获得一个不是数组的对象
android – 用GSON解析JSON
@H_301_0@我在使用GSON时遇到了一些麻烦,主要是从JSON反序列化到POJO.
我有以下JSON:
{
"events":
[
{
"event":
{
"id": 628374485,"title": "Developing for the Windows Phone"
}
},{
"event":
{
"id": 765432,"title": "Film Makers Meeting"
}
}
]
}
随着以下POJO的……
public class EventSearchResult {
private List
…我正在使用以下代码进行反序列化,其中json输入是上面的json
Gson gson = new Gson();
return gson.fromJson(jsonInput,EventSearchResult.class);
但是,我无法正确填充事件列表.标题和ID始终为null.我确定我错过了什么,但我不确定是什么.任何的想法?
谢谢
android – 用gson解析JSON对象
{"response":[123123,1231231,123124,124124,111111,12314]}
有了GSON,制作
Gson gson = new GsonBuilder().create(); int[] friends = new Gson().fromJson(answer,int[].class); System.out.print(friends[0]);
但是获得错误预期BEGIN_ARRAY但在第1行第2列是BEGIN_OBJECT
如何在数组中解析这些数字?
@R_301_5609@
public class ResponseModel { private List<Integer> response = new ArrayList<Integer>(); public List<Integer> getResponse() { return response; } @Override public String toString() { return "ResponseModel [response=" + response + "]"; } }
然后你可以打电话
Gson gson = new Gson(); ResponseModel responseModel = gson.fromJson("{\"response\":[123123,12314]}",ResponseModel.class); List <Integer> responses = responseModel.getResponse(); // ... do something with the int list
我们今天的关于Android2.3解析json出错和android 解析json的分享已经告一段落,感谢您的关注,如果您想了解更多关于android Gson解析JSON格式、android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组、android – 用GSON解析JSON、android – 用gson解析JSON对象的相关信息,请在本站查询。
本文标签: