在Android Studio中从JSON获取值
我知道有很多JSON解析问题。很抱歉,我又问了一个问题,但我不能让这个工作 我收到了来自DarkSky的JSON响应。这个响应很好,我正在将这些数据放入一个名为tvForecast的文本视图中。现在我试图从这个字符串中得到summary的值 以下是我的JSON响应:在Android Studio中从JSON获取值,android,json,parsing,darksky,Android,Json,Parsing,Darksky,我知道有很多JSON解析问题。很抱歉,我又问了一个问题,但我不能让这个工作 我收到了来自DarkSky的JSON响应。这个响应很好,我正在将这些数据放入一个名为tvForecast的文本视图中。现在我试图从这个字符串中得到summary的值 以下是我的JSON响应: {"latitude":36.946813,"longitude":127.019736,"timezone":"Asia/Seoul","daily":{"data":[{"time":1570374000,"summary":"
{"latitude":36.946813,"longitude":127.019736,"timezone":"Asia/Seoul","daily":{"data":[{"time":1570374000,"summary":"Light rain until evening.","icon":"rain","sunriseTime":1570397580,"sunsetTime":1570439340,"moonPhase":0.31,"precipIntensity":0.0327,"precipIntensityMax":0.0838,"precipIntensityMaxTime":1570406520,"precipProbability":1,"precipType":"rain","temperatureHigh":60.89,"temperatureHighTime":1570441560,"temperatureLow":53.41,"temperatureLowTime":1570477080,"apparentTemperatureHigh":60.97,"apparentTemperatureHighTime":1570441860,"apparentTemperatureLow":53.9,"apparentTemperatureLowTime":1570477080,"dewPoint":56.92,"humidity":0.94,"pressure":1019.4,"windSpeed":4.02,"windGust":15.19,"windGustTime":1570374000,"windBearing":96,"cloudCover":0.98,"uvIndex":4,"uvIndexTime":1570418340,"visibility":6.895,"ozone":289,"temperatureMin":55.57,"temperatureMinTime":1570396140,"temperatureMax":63.38,"temperatureMaxTime":1570374000,"apparentTemperatureMin":56.07,"apparentTemperatureMinTime":1570396020,"apparentTemperatureMax":62.88,"apparentTemperatureMaxTime":1570374000}]},"offset":9}
下面是我从一个TextView tvForecast收集此信息并将摘要值放入另一个TextView tvSummary的方法
private void jsonParse() {
String jsonRawData = tvForecast.getText().toString();
try {
JSONObject jsonObject = new JSONObject(jsonRawData);
JSONArray jsonArray = jsonObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject data = jsonArray.getJSONObject(i);
String summary = data.getString("summary");
tvSummary.append(summary);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
这是来自Logcat的消息。注意,应用程序没有崩溃。它似乎没有找到我想要的价值
W/System.err:org.json.JSONException:No value for data在获取json数组之前尝试添加此行
JSONObject jsonObject = new JSONObject(jsonRawData);
JSONObject jsonData = jsonObject.getJSONObject("daily")
JSONArray jsonArray = jsonData.getJSONArray("data");
在获取json数组之前,请尝试添加此行
JSONObject jsonObject = new JSONObject(jsonRawData);
JSONObject jsonData = jsonObject.getJSONObject("daily")
JSONArray jsonArray = jsonData.getJSONArray("data");
您没有添加每日对象。请试试这个
private void jsonParse() {
String jsonRawData = tvForecast.getText().toString();
try {
JSONObject jsonObject = new JSONObject(jsonRawData);
JSONObject jsonDailyObject = jsonObject.getJSONObject("daily")
JSONArray jsonArray = jsonDailyObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject data = jsonArray.getJSONObject(i);
String summary = data.getString("summary");
tvSummary.append(summary);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
您没有添加每日对象。请试试这个
private void jsonParse() {
String jsonRawData = tvForecast.getText().toString();
try {
JSONObject jsonObject = new JSONObject(jsonRawData);
JSONObject jsonDailyObject = jsonObject.getJSONObject("daily")
JSONArray jsonArray = jsonDailyObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject data = jsonArray.getJSONObject(i);
String summary = data.getString("summary");
tvSummary.append(summary);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
在JSON字符串中,数据不是根节点,而是在日常节点中。因此,首先必须解析daily节点,然后获取数据数组。
尝试执行以下操作
private void jsonParse() {
String jsonRawData = tvForecast.getText().toString();
try {
// Reading the main JSON.
JSONObject jsonObject = new JSONObject(jsonRawData);
// Reading the content from daily node of JSON to get data array
JSONObject jsonData = jsonObject.getJSONObject("daily")
// Reading data node to get desired array
JSONArray jsonArray = jsonData.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject data = jsonArray.getJSONObject(i);
String summary = data.getString("summary");
tvSummary.append(summary);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
在JSON字符串中,数据不是根节点,而是在日常节点中。因此,首先必须解析daily节点,然后获取数据数组。
尝试执行以下操作
private void jsonParse() {
String jsonRawData = tvForecast.getText().toString();
try {
// Reading the main JSON.
JSONObject jsonObject = new JSONObject(jsonRawData);
// Reading the content from daily node of JSON to get data array
JSONObject jsonData = jsonObject.getJSONObject("daily")
// Reading data node to get desired array
JSONArray jsonArray = jsonData.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject data = jsonArray.getJSONObject(i);
String summary = data.getString("summary");
tvSummary.append(summary);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
如果您正在努力使用JSON,那么将JSON解析为POJO可能是值得的。虽然您可以正确地使用JSON,但这样做可能更好,特别是如果您计划使用更多数据 首先,创建您的POJO类。根据需要重命名它们
public class SomeClass
{
private String offset;
private String timezone;
private String latitude;
private Daily daily;
private String longitude;
public String getOffset ()
{
return offset;
}
public void setOffset (String offset)
{
this.offset = offset;
}
public String getTimezone ()
{
return timezone;
}
public void setTimezone (String timezone)
{
this.timezone = timezone;
}
public String getLatitude ()
{
return latitude;
}
public void setLatitude (String latitude)
{
this.latitude = latitude;
}
public Daily getDaily ()
{
return daily;
}
public void setDaily (Daily daily)
{
this.daily = daily;
}
public String getLongitude ()
{
return longitude;
}
public void setLongitude (String longitude)
{
this.longitude = longitude;
}
@Override
public String toString()
{
return "ClassPojo [offset = "+offset+", timezone = "+timezone+", latitude = "+latitude+", daily = "+daily+", longitude = "+longitude+"]";
}
}
**
**
您可以将数据[]转换为ArrayList,以便在需要时使用
现在您需要将JSON转换为POJO
为此,我们将使用GSON,将其添加到app.gradle文件中
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
现在要转换JSON,请编写如下代码:
Gson gson = new Gson();
SomeClass myClass = gson.fromJson(jsonString, SomeClass.class);
现在你需要做的就是
setText(myClass.getDaily().getDaily()[0].getSummary();
你所需要做的就是解决这个问题
getDaily()[0]
检查数据是否确实存在,或者它可能引发异常 如果您正在努力使用JSON,那么将JSON解析为POJO可能是值得的。虽然您可以正确地使用JSON,但这样做可能更好,特别是如果您计划使用更多数据 首先,创建您的POJO类。根据需要重命名它们
public class SomeClass
{
private String offset;
private String timezone;
private String latitude;
private Daily daily;
private String longitude;
public String getOffset ()
{
return offset;
}
public void setOffset (String offset)
{
this.offset = offset;
}
public String getTimezone ()
{
return timezone;
}
public void setTimezone (String timezone)
{
this.timezone = timezone;
}
public String getLatitude ()
{
return latitude;
}
public void setLatitude (String latitude)
{
this.latitude = latitude;
}
public Daily getDaily ()
{
return daily;
}
public void setDaily (Daily daily)
{
this.daily = daily;
}
public String getLongitude ()
{
return longitude;
}
public void setLongitude (String longitude)
{
this.longitude = longitude;
}
@Override
public String toString()
{
return "ClassPojo [offset = "+offset+", timezone = "+timezone+", latitude = "+latitude+", daily = "+daily+", longitude = "+longitude+"]";
}
}
**
**
您可以将数据[]转换为ArrayList,以便在需要时使用
现在您需要将JSON转换为POJO
为此,我们将使用GSON,将其添加到app.gradle文件中
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
现在要转换JSON,请编写如下代码:
Gson gson = new Gson();
SomeClass myClass = gson.fromJson(jsonString, SomeClass.class);
现在你需要做的就是
setText(myClass.getDaily().getDaily()[0].getSummary();
你所需要做的就是解决这个问题
getDaily()[0]
检查数据是否确实存在,或者它可能引发异常 数据在每日对象中,你需要先获取它。检查我的答案数据在每日对象中,你需要先获取它。检查我的答案你没有用它回答问题你没有用它回答问题