Java gson 转换错误

标签 java json swing gson netbeans-platform

我正在尝试在 netbeans 上开发 swing 应用程序。我正在使用 gson 解码 json。我从 php 站点获取 json 数据。我无法将 json 数据转换为 java 数组。

如何将获取的 json 文件转换为 java 数组。然后我需要设置jcombobox数据源这个数组。

我的 json 文件在 url 上是这样的

[{"id":"1",
"ad":"jack",
"latitude":"41.0000",
"longitude":"32.000",
"speed":"",
"hour":"01:28:56",
"day":"18.04.2016",
"adres":"adres",
"resimyol":"http:\/\/maps.google.com\/maps\/api\/staticmap?.jpg"},
{"id":"2",
"ad":"Abraham",
"latitude":"41.0000",
"longitude":"41.0000",
"speed":"",
"hour":"01:28:56",
"day":"18.04.2016",
"adres":"adres",
"resimyol":"http:\/\/maps.google.com\/maps\/api\/staticmap?.jpg"}]

这是我的 java 文件

public class JsonPojo {
public String id;
public String ad;
public String latitude;
public String longitude;
public String speed;
public String hour;
public String day;
public String adres;
public String resimyol;
public String getId() { return id; }
public String getName() { return ad; }
public String getlat() { return latitude; }
public String getlon() { return longitude; }
public String getspeed() { return speed; }
public String gethour() { return hour; }
public String getday() { return day; }
public String getadres() { return adres; }
public String getresim() { return resimyol; }

}

public static void main(String args[]) {
public void run() {
            new KonumGoster().setVisible(true);
             String json = null;
            try {
                json = readUrl("http://url.com/"
                        + "json.php");
            } catch (Exception ex) {
                Logger.getLogger(KonumGoster.class.getName()).log(Level.SEVERE, null, ex);
            }

Gson gson = new Gson();    
JsonPojo[] array = gson.fromJson(gson, JsonPojo[].class); 
JsonPojo obj = new Gson().fromJson(json, JsonPojo.class);
System.out.println("ID: " +obj.getId());
System.out.println("ID: " +obj.getName());
System.out.println("ID: " +obj.getlat());
System.out.println("ID: " +obj.getlon());
System.out.println("ID: " +obj.getspeed());
System.out.println("ID: " +obj.gethour());
System.out.println("ID: " +obj.getday());
System.out.println("ID: " +obj.getadres());
System.out.println("ID: " +obj.getresim());

}  

当我尝试运行项目时,它会给我这样的错误

运行: 线程“AWT-EventQueue-0”com.google.gson.JsonSyntaxException 中出现异常:java.lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 2 行第 13 列路径 $ 处为 BEGIN_ARRAY 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) 在 com.google.gson.Gson.fromJson(Gson.java:887) 在 com.google.gson.Gson.fromJson(Gson.java:852) 在 com.google.gson.Gson.fromJson(Gson.java:801) 在 com.google.gson.Gson.fromJson(Gson.java:773) 在KonumGoster$1.run(KonumGoster.java:145) 在 java.awt.event.InvocableEvent.dispatch(InvocableEvent.java:311) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 在java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3.run(EventQueue.java:703) 在 java.security.AccessController.doPrivileged( native 方法) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 引起原因:java.lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 2 行第 13 列路径 $ 处为 BEGIN_ARRAY 在 com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385) 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) ... 19 更多 构建成功(总时间:5 分 5 秒)

最佳答案

Gson gson = new Gson();    
JsonPojo[] array = gson.fromJson(gson, JsonPojo[].class); 
JsonPojo obj = new Gson().fromJson(json, JsonPojo.class);

第二条语句使用 gson 而不是 json 作为 Gson::fromJson 的第一个参数。如果将其更改为 json,GSON 将正确完成其工作。

构建中的错误消息来自第三条语句,其中您尝试从 JSON 对象数组中读取单个对象。您只需要第二条语句,然后迭代其结果即可打印每一项。

Gson gson = new Gson();
JsonPojo[] array = gson.fromJson(json, JsonPojo[].class);
for (JsonPojo obj : array) {
    System.out.println("id: " + obj.getId());
    // etc
}

关于Java gson 转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084164/

相关文章:

java - Swing 表单编辑器

java - YARN(Hadoop)中的容器分配代码

java - 为什么我在使用 Mapreduce 时得到了一个困惑的结果

mysql - 在 MySql 表中的 Json 数组中搜索

javascript - 访问json对象内的数据错误

java - JProgressBar 不在循环内更新

java - JInternalFrame 不显示

java - 使用 Lambda 在 Java 中合并两个不同类型(字符串和整数)的排序列表

java - Apache Camel 的 REST 端点

json - 强制 jackson 映射器始终在 writeValue 上添加类类型而无需注释