如何将json数组中的值转换为java字符串
我需要从JSON数组中获取值并显示它们。下面是我使用的代码如何将json数组中的值转换为java字符串,java,arrays,json,Java,Arrays,Json,我需要从JSON数组中获取值并显示它们。下面是我使用的代码 getresponse类将向PHP页面发送HTTP请求,并获取相关的JSON数组,公共变量res将保存返回的JSON数组 public class JSONConverter { public void convert(){ getresponse gr=new getresponse(); String json = gr.res; Data data = new Gson()
getresponse
类将向PHP页面发送HTTP请求,并获取相关的JSON数组,公共变量res将保存返回的JSON数组
public class JSONConverter {
public void convert(){
getresponse gr=new getresponse();
String json = gr.res;
Data data = new Gson().fromJson(json, Data.class);
System.out.println(data);
}
}
class Data {
private String city;
private int reserve_no;
public String getCity() { return city; }
public int getReserve_no() { return reserve_no; }
public void setTitle(String city) { this.city = city; }
public void setId(int reserve_no) { this.reserve_no = reserve_no; }
public String toString() {
return String.format(city);
}
}
获取响应类
public class getresponse {
public static String res;
public void counter() {
try {
URL url = new URL("http://taxi.net/fetchLatest.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String str;
while ((str =br.readLine()) != null) {
res=str;
}
conn.disconnect();
下面是返回的JSON数组示例
[{“保留区编号”:“20”,“城市”:“城市2”,“街道”:“街道1234”,“描述”:“描述123”,“日期”:“2012-10-22”
04:47:54,“客户”:“abc”}]
此代码不显示返回的JSON数组的城市名称。有人能帮我修改代码,或者建议一个更好或更简单的方法吗 Gson根据类属性名称将json字符串映射到类。所以
Data
类具有属性title
,该属性应该映射到json数组中的city
。您需要将您的属性重命名为city
,以便Gson可以从json数组中找出放置city
的位置。或者,您可以使用注释将
城市
明确映射到标题
。选中此项:Gson根据类属性名称将json字符串映射到类。所以Data
类具有属性title
,该属性应该映射到json数组中的city
。您需要将您的属性重命名为city
,以便Gson可以从json数组中找出放置city
的位置。或者,您可以使用注释将
城市
明确映射到标题
。检查此项:尼基塔已经为您提供了正确的解决方案,但现在是一步一步
我将您的问题简化为以下最小测试:
import com.google.gson.Gson;
public class TestGSON
{
public static void main( String[] args )
{
// that's your JSON sample
String json = "[{\"reserve_no\":\"20\",\"city\":\"city2\",\"street\":\"street1234\",\"discription\":\"discription123\",\"date\":\"2012-10-22 04:47:54\",\"customer\":\"abc\"}]";
// note: we tell Gson to expect an **array** of Data
Data data[] = new Gson().fromJson(json, Data[].class);
System.out.println(data[0]);
}
}
问题在于,JSON片段实际上是对象的数组,而不仅仅是一个对象(因此它周围的[])。因此,您需要告诉GSon它必须期望一个数据数组,而不仅仅是一个数据对象。顺便说一句,执行代码时抛出的异常,正如已经告诉您的那样:
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
当然,除非它被一个空的catch
块吞没
关于数据类:在像这里一样重写toString方法之前,请三思。我会放弃那种方法,直接去做
System.out.println( data[0].getCity() );
尼基塔已经给了你正确的解决方案,但在这里,一步一步 我将您的问题简化为以下最小测试:
import com.google.gson.Gson;
public class TestGSON
{
public static void main( String[] args )
{
// that's your JSON sample
String json = "[{\"reserve_no\":\"20\",\"city\":\"city2\",\"street\":\"street1234\",\"discription\":\"discription123\",\"date\":\"2012-10-22 04:47:54\",\"customer\":\"abc\"}]";
// note: we tell Gson to expect an **array** of Data
Data data[] = new Gson().fromJson(json, Data[].class);
System.out.println(data[0]);
}
}
问题在于,JSON片段实际上是对象的数组,而不仅仅是一个对象(因此它周围的[])。因此,您需要告诉GSon它必须期望一个数据数组,而不仅仅是一个数据对象。顺便说一句,执行代码时抛出的异常,正如已经告诉您的那样:
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
当然,除非它被一个空的catch
块吞没
关于数据类:在像这里一样重写toString方法之前,请三思。我会放弃那种方法,直接去做
System.out.println( data[0].getCity() );
您的数据类和返回的JSON之间绝对没有关联,那么GSON怎么知道它应该做什么呢?您可能应该创建一个更合适的数据类,其中的字段与JSON字符串中的字段名称匹配。是的,我做了这些更改!标题为city,id为reserve\u否,但我还没有从回复中获得相关的城市名称。您是说发布的代码示例与您实际运行的代码没有任何关系?这使我们发现问题有点困难,你不这么认为吗?在这种情况下,您应该更新问题中的代码示例。我已经更新了!请检查:)您的数据类和返回的JSON之间绝对没有关联,那么GSON怎么知道它应该做什么呢?您可能应该创建一个更合适的数据类,其中的字段与JSON字符串中的字段名称匹配。是的,我做了这些更改!标题为city,id为reserve\u否,但我还没有从回复中获得相关的城市名称。您是说发布的代码示例与您实际运行的代码没有任何关系?这使我们发现问题有点困难,你不这么认为吗?在这种情况下,您应该更新问题中的代码示例。我已经更新了!请检查:)谢谢您的快速回复!即使在我改变了它们之后,我也没有从收到的回复中得到城市名称。还有什么我应该做的编码吗?关于更多的问题。您拥有json对象的名称和数组。您希望将其转换为单个对象。你不能。尝试类似于
Data[]datas=new Gson().fromJson(json,Data[].class)的方法代码>我只想得到几个特定的值。与示例响应一样,我只想得到city2和20的值。还有什么我可以做的吗?谢谢你的快速回复!即使在我改变了它们之后,我也没有从收到的回复中得到城市名称。还有什么我应该做的编码吗?关于更多的问题。您拥有json对象的名称和数组。您希望将其转换为单个对象。你不能。尝试类似于Data[]datas=new Gson().fromJson(json,Data[].class)的方法代码>我只想得到几个特定的值。与示例响应一样,我只想得到city2和20的值。还有什么我能做的吗?