У меня есть следующая строка JSON из веб-службы, и я пытаюсь преобразовать ее в JSONarray
{
"locations": [
{
"lat": "23.053",
"long": "72.629",
"location": "ABC",
"address": "DEF",
"city": "Ahmedabad",
"state": "Gujrat",
"phonenumber": "1234567"
},
{
"lat": "23.053",
"long": "72.629",
"location": "ABC",
"address": "DEF",
"city": "Ahmedabad",
"state": "Gujrat",
"phonenumber": "1234567"
},
{
"lat": "23.053",
"long": "72.629",
"location": "ABC",
"address": "DEF",
"city": "Ahmedabad",
"state": "Gujrat",
"phonenumber": "1234567"
},
{
"lat": "23.053",
"long": "72.629",
"location": "ABC",
"address": "DEF",
"city": "Ahmedabad",
"state": "Gujrat",
"phonenumber": "1234567"
},
{
"lat": "23.053",
"long": "72.629",
"location": "ABC",
"address": "DEF",
"city": "Ahmedabad",
"state": "Gujrat",
"phonenumber": "1234567"
}
]
}
Я подтвердил это в String
Интернете, кажется, это правильно. Теперь я использую следующий код в разработке для Android, чтобы использовать
JSONArray jsonArray = new JSONArray(readlocationFeed);
Это вызывает исключение a type mismatch Exception.
readlocationFeed
?Ответы:
Здесь вы получаете JSONObject, поэтому измените эту строку:
JSONArray jsonArray = new JSONArray(readlocationFeed);
со следующим:
JSONObject jsnobject = new JSONObject(readlocationFeed);
и после
JSONArray jsonArray = jsnobject.getJSONArray("locations"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject explrObject = jsonArray.getJSONObject(i); }
источник
Строка ввода
[ { "userName": "sandeep", "age": 30 }, { "userName": "vivan", "age": 5 } ]
Простой способ преобразовать строку в JSON
public class Test { public static void main(String[] args) throws JSONException { String data = "[{\"userName\": \"sandeep\",\"age\":30},{\"userName\": \"vivan\",\"age\":5}] "; JSONArray jsonArr = new JSONArray(data); for (int i = 0; i < jsonArr.length(); i++) { JSONObject jsonObj = jsonArr.getJSONObject(i); System.out.println(jsonObj); } } }
Выход
{"userName":"sandeep","age":30} {"userName":"vivan","age":5}
источник
Использование json lib: -
String data="[{"A":"a","B":"b","C":"c","D":"d","E":"e","F":"f","G":"g"}]"; Object object=null; JSONArray arrayObj=null; JSONParser jsonParser=new JSONParser(); object=jsonParser.parse(data); arrayObj=(JSONArray) object; System.out.println("Json object :: "+arrayObj);
Использование GSON lib: -
Gson gson = new Gson(); String data="[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":\"d\",\"E\":\"e\",\"F\":\"f\",\"G\":\"g\"}]"; JsonParser jsonParser = new JsonParser(); JsonArray jsonArray = (JsonArray) jsonParser.parse(data);
источник
gson
объект создается, но не используется.Gson gson = new Gson();
вам нужно будет преобразовать данную строку в
JSONObject
вместо,JSONArray
потому что текущая строка содержитJsonObject
корневой элемент вместоJsonArray
:JSONObject jsonObject = new JSONObject(readlocationFeed);
источник
String b = "[" + readlocationFeed + "]"; JSONArray jsonArray1 = new JSONArray(b); jsonarray_length1 = jsonArray1.length(); for (int i = 0; i < jsonarray_length1; i++) { }
или преобразовать в JSONOBJECT
JSONObject jsonobj = new JSONObject(readlocationFeed); JSONArray jsonArray = jsonobj.getJSONArray("locations");
источник
Попробуйте этот фрагмент кода:
try { Log.e("log_tag", "Error in convert String" + result.toString()); JSONObject json_data = new JSONObject(result); String status = json_data.getString("Status"); { String data = json_data.getString("locations"); JSONArray json_data1 = new JSONArray(data); for (int i = 0; i < json_data1.length(); i++) { json_data = json_data1.getJSONObject(i); String lat = json_data.getString("lat"); String lng = json_data.getString("long"); } } }
источник
если ответ такой
"GetDataResult": "[{\"UserID\":1,\"DeviceID\":\"d1254\",\"MobileNO\":\"056688\",\"Pak1\":true,\"pak2\":true,\"pak3\":false,\"pak4\":true,\"pak5\":true,\"pak6\":false,\"pak7\":false,\"pak8\":true,\"pak9\":false,\"pak10\":true,\"pak11\":false,\"pak12\":false}]"
ты можешь разобрать вот так
JSONObject jobj=new JSONObject(response); String c = jobj.getString("GetDataResult"); JSONArray jArray = new JSONArray(c); deviceId=jArray.getJSONObject(0).getString("DeviceID");
здесь размер JsonArray равен 1. В противном случае вы должны использовать цикл for для получения значений.
источник
Вы можете сделать следующее:
JSONArray jsonArray = jsnobject.getJSONArray("locations"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject explrObject = jsonArray.getJSONObject(i); }
источник
Это очень простой способ конвертировать:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; class Usuario { private String username; private String email; private Integer credits; private String twitter_username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getCredits() { return credits; } public void setCredits(Integer credits) { this.credits = credits; } public String getTwitter_username() { return twitter_username; } public void setTwitter_username(String twitter_username) { this.twitter_username = twitter_username; } @Override public String toString() { return "UserName: " + this.getUsername() + " Email: " + this.getEmail(); }
}
/* * put string into file jsonFileArr.json * [{"username":"Hello","email":"hello@email.com","credits" * :"100","twitter_username":""}, * {"username":"Goodbye","email":"goodbye@email.com" * ,"credits":"0","twitter_username":""}, * {"username":"mlsilva","email":"mlsilva@email.com" * ,"credits":"524","twitter_username":""}, * {"username":"fsouza","email":"fsouza@email.com" * ,"credits":"1052","twitter_username":""}] */ public class TestaGsonLista { public static void main(String[] args) { Gson gson = new Gson(); try { BufferedReader br = new BufferedReader(new FileReader( "C:\\Temp\\jsonFileArr.json")); JsonArray jsonArray = new JsonParser().parse(br).getAsJsonArray(); for (int i = 0; i < jsonArray.size(); i++) { JsonElement str = jsonArray.get(i); Usuario obj = gson.fromJson(str, Usuario.class); System.out.println(obj); System.out.println(str); System.out.println("-------"); } } catch (IOException e) { e.printStackTrace(); } }
}
источник
Если у вас есть следующий JSON из веб-службы, Json Array в качестве ответа:
[3] 0: { id: 2 name: "a561137" password: "test" firstName: "abhishek" lastName: "ringsia" organization: "bbb" }- 1: { id: 3 name: "a561023" password: "hello" firstName: "hello" lastName: "hello" organization: "hello" }- 2: { id: 4 name: "a541234" password: "hello" firstName: "hello" lastName: "hello" organization: "hello" }
сначала нужно принять его как массив Json, затем при чтении его объекта необходимо использовать Object Mapper.readValue, потому что объект Json все еще находится в строке.
List<User> list = new ArrayList<User>(); JSONArray jsonArr = new JSONArray(response); for (int i = 0; i < jsonArr.length(); i++) { JSONObject jsonObj = jsonArr.getJSONObject(i); ObjectMapper mapper = new ObjectMapper(); User usr = mapper.readValue(jsonObj.toString(), User.class); list.add(usr); }
mapper.read - правильная функция, если вы используете mapper.convert (param, param). Это даст вам ошибку.
источник