gpt4 book ai didi

java - 如何将 json 数组中的值转换为 java 字符串

转载 作者:行者123 更新时间:2023-12-01 18:58:53 25 4
gpt4 key购买 nike

我需要从 JSON 数组中获取值并显示它们。下面是我使用过的代码。

getresponse 类将向 PHP 页面发送 HTTP 请求并获取相关的 JSON 数组,公共(public)变量 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);
}
}

getrespose 类

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 数组的示例。

[{"reserve_no":"20","city":"city2","street":"street1234","discription":"discription123","date":"2012-10-22 04:47:54","customer":"abc"}]

此代码不显示返回的 JSON 数组的城市名称。有人可以通过更正代码来帮助我解决这个问题,或者建议更好或更简单的方法(如果有)吗? :)

最佳答案

尼基塔已经为您提供了正确的解决方案,但这里是一步一步的。

我将您的问题简化为这个最小的测试:

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 block 吞没

关于 Data 类:在像这里一样重写 toString 方法之前请三思。我会放弃该方法并直接执行

System.out.println( data[0].getCity() );

关于java - 如何将 json 数组中的值转换为 java 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020109/

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