gpt4 book ai didi

android - 如何将 JSONArray 转换为 arraylist

转载 作者:行者123 更新时间:2023-11-29 01:35:15 25 4
gpt4 key购买 nike

我有 JSONArray(不是 JSONObject),这个数组的内容看起来像:

[{"ID":"24","CardName":"Gool","CardCode":"9785898080617","CardCodeType":"EAN-13","CardHolderName":"\u041f\u0443\u043f\u043a\u0438\u043d","CardCountryCode":"UA","CardHolderID":"3","CardSumRait":"55","VotesCount":"11","Rating":"5"},{"ID":"25","CardName":"XCode","CardCode":"9785898080617","CardCodeType":"EAN-13","CardHolderName":"\u041f\u0443\u043f\u043a\u0438\u043d","CardCountryCode":"UA","CardHolderID":"3","CardSumRait":"31","VotesCount":"8","Rating":"3.875"}]

现在我需要将它转换为 ArrayList,我一直在寻找不同的手册,但是尝试了一些代码:

我的JSONParcer:

public class JSONParcer {

ArrayList<Person> getArrayOfWebData = new ArrayList<Person>();
static InputStream is = null;
static JSONObject jsonObject = null;
static String json = "";

//конструктор
public JSONParcer() {

}
class Person {
public String cardID;
public String cardName;
public String cardCode;
public String cardCodeType;
public String cardHolderName;
public String cardCountryCode;
public String cardHolderID;
public String cardSumRait;
public String votesCount;
public String rating;
}

public JSONObject getJSONFromUrl(String url) {
//делаем HTTP запрос

try {
//default HTTP client
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();


} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line + "\n");

}
is.close();
json = sb.toString();




} catch (UnsupportedEncodingException e) {
e.printStackTrace();

}

catch (IOException e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
try {
jsonObject = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON parcer" , "Error parcing data " +e.toString());
}
try{
JSONArray jsonArray = new JSONArray(json);
for (int i=0; i < jsonArray.length(); i++) {

JSONObject json_data = jsonArray.getJSONObject(i);

Person resultRow = new Person();

resultRow.cardID = json_data.getString("ID");
resultRow.cardName = json_data.getString("CardName");
resultRow.cardCode = json_data.getString("CardCode");
resultRow.cardCodeType = json_data.getString("CardCodeType");
resultRow.cardHolderName = json_data.getString("CardHolderName");
resultRow.cardCountryCode =json_data.getString("CardCountryCode");
resultRow.cardHolderID = json_data.getString("CardHolderID");
resultRow.cardSumRait = json_data.getString("CardSumRait");
resultRow.votesCount = json_data.getString("VotesCount");
resultRow.rating = json_data.getString("Rating");


getArrayOfWebData.add(resultRow);

}

} catch (JSONException e) {
e.printStackTrace();
}

return jsonObject;
}

我的MainActivity:

public class MainActivity extends ActionBarActivity {


String jsonString;
Button btn;

ArrayList<Person> getArrayOfWebData = new ArrayList<Person>();

public void showArrayinLogs(View view) {
new JsonParce().execute();
}

class Person {
public String cardID;
public String cardName;
public String cardCode;
public String cardCodeType;
public String cardHolderName;
public String cardCountryCode;
public String cardHolderID;
public String cardSumRait;
public String votesCount;
public String rating;
}

String url1 = "/*my url here*/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

public class JsonParce extends AsyncTask<String , String, JSONObject>{

@Override
protected JSONObject doInBackground(String... args) {
JSONParcer jsonParcer = new JSONParcer();
JSONObject json = jsonParcer.getJSONFromUrl(url1);
return json;
}

@Override
protected void onPostExecute(JSONObject jsonObject ) {
int a = getArrayOfWebData.size();
for(int i =0 ; i<a ; i++){
Log.i("WORKS", getArrayOfWebData.get(i).toString());
}

}
}

当我启动我的程序并单击按钮以在日志中显示数组时,我有这个

  Value [{"Rating":"5","CardName":"Gool","VotesCount":"11","CardSumRait":"55","CardHolderName":"Пупкин","ID":"24","CardCountryCode":"UA","CardHolderID":"3","CardCode":"9785898080617","CardCodeType":"EAN-13"},{"Rating":"3.875","CardName":"XCode","VotesCount":"8","CardSumRait":"31","CardHolderName":"Пупкин","ID":"25","CardCountryCode":"UA","CardHolderID":"3","CardCode":"9785898080617","CardCodeType":"EAN-13"}] of type org.json.JSONArray cannot be converted to JSONObject

我知道我在我的 JSONParcer 课上犯了错误,但是你能解释一下我需要改变什么吗?只是将 JSONObject 重命名为 JSONArray 并不能正常工作。谢谢解答

最佳答案

问题出在您的 JSONParcer 类中。在下面的代码中,您尝试从 JSON 数组 (json) 创建 JSON 对象,这就是您收到错误的原因 type org.json.JSONArray cannot be converted to JSONObject.

try {
jsonObject = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON parcer" , "Error parcing data " +e.toString());
}

解决此问题的方法是删除您的代码部分,因为您正在读取 json 两次。

你在这里已经正确地做到了 --> JSONArray jsonArray = new JSONArray(json);

public class JSONParcer {

ArrayList<Person> getArrayOfWebData = new ArrayList<Person>();
static InputStream is = null;
static JSONArray jsonArray = null;
static String json = "";

....


// change getJSONFromUrl to return ArrayList<Person>
public ArrayList<Person> getJSONFromUrl(String url) {
//делаем HTTP запрос

....


try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line + "\n");
}
is.close();
json = sb.toString();

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

catch (IOException e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}

try{
jsonArray = new JSONArray(json);
for (int i=0; i < jsonArray.length(); i++) {

JSONObject json_data = jsonArray.getJSONObject(i);

Person resultRow = new Person();

resultRow.cardID = json_data.getString("ID");
resultRow.cardName = json_data.getString("CardName");
resultRow.cardCode = json_data.getString("CardCode");
resultRow.cardCodeType = json_data.getString("CardCodeType");
resultRow.cardHolderName = json_data.getString("CardHolderName");
resultRow.cardCountryCode =json_data.getString("CardCountryCode");
resultRow.cardHolderID = json_data.getString("CardHolderID");
resultRow.cardSumRait = json_data.getString("CardSumRait");
resultRow.votesCount = json_data.getString("VotesCount");
resultRow.rating = json_data.getString("Rating");

getArrayOfWebData.add(resultRow);

}

} catch (JSONException e) {
e.printStackTrace();
}

// return ArrayList<Person>
return getArrayOfWebData;
}

然后在你的MainActivity中,改变doInBackground返回的对象,对象输入类型为AsyncTask,对象输入类型为onPostExecuteJSONArray:

public class MainActivity extends ActionBarActivity {

...

public class JsonParce extends AsyncTask<String, String, ArrayList<Person>>{

@Override
protected ArrayList<Person> doInBackground(String... args) {
JSONParcer jsonParcer = new JSONParcer();
ArrayList<Person> personArrayList = jsonParcer.getJSONFromUrl(url1);
return personArrayList;
}

@Override
protected void onPostExecute(ArrayList<Person> personArrayList) {
int a = personArrayList.size();
for(int i =0 ; i<a ; i++){
Log.i("WORKS", personArrayList.get(i).toString());
}

}
}
}

编辑

我根据您的评论更新了我的答案。您的 JsonParce AsyncTask 现在返回 PersonArrayList。如果这有帮助,请告诉我。

关于android - 如何将 JSONArray 转换为 arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28647289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com