使用Gson将JSON字符串转换为对象

wvyml7n5  于 2023-06-29  发布在  其他
关注(0)|答案(2)|浏览(201)

服务方法返回response()->json($response)
端点的响应是

{"units":[{"id":1,"unit_name":"Carton","created_at":"2023-04-28T16:25:24.000000Z","updated_at":"2023-04-28T16:25:24.000000Z"},{"id":2,"unit_name":"Box","created_at":"2023-04-28T16:25:31.000000Z","updated_at":"2023-04-28T16:25:31.000000Z"},{"id":3,"unit_name":"Kg","created_at":"2023-04-28T16:25:39.000000Z","updated_at":"2023-04-28T16:25:39.000000Z"}],"loc":"Loc","success":1}

我想在Android Java中将此JSON字符串解析为对象。下面是我的代码:我无法获取UnitRes对象

Gson gson = new Gson();
                UnitRes res = gson.fromJson(response, new TypeToken<UnitRes>(){}.getType());

请问这里有什么问题吗??

public class UnitRes{
    private List<Unit> units;
    private int success;
    private String loc;
}
public class Unit{
    private int id;
    private String unit_name;
    private String created_at;
    private String updated_at;
    //getters & setters
}
bvn4nwqk

bvn4nwqk1#

我不确定您当前代码中的response,我假设它是JSON文件的内容。您可以使用gson.fromJson(response, UnitRes.class)来解析文件,示例如下:

import com.google.gson.Gson;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    private static final String JSON_FILENAME = "src/main/resources/data.json";
    // the path and filename to JSON file

    public static void main(String[] args) throws FileNotFoundException {
        Scanner scanner = new Scanner(new File(JSON_FILENAME));
        StringBuilder builder = new StringBuilder();
        while (scanner.hasNext()) {
            builder.append(scanner.next()); // read the content of the JSON file
        }
        String response = builder.toString(); // get the string of the content

        Gson gson = new Gson();
        UnitRes res = gson.fromJson(response, UnitRes.class);
        // public <T> T fromJson(String json, Class<T> classOfT) throws ... { ... }
        System.out.println(res);
    }
}

注意:我使用的GSON版本:

<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.10.1</version>
    </dependency>
</dependencies>
gxwragnw

gxwragnw2#

您的代码似乎基本正确,但有几个问题可能导致问题。
首先,确保UnitResUnit类的字段具有适当的getter和setter。Gson需要这些方法来正确地序列化和反序列化。
接下来,确保您已经从Gson库导入了必要的类。以下是需要包含在Java文件开头的import语句:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

最后,在使用fromJson()时,需要将JSON字符串作为Reader对象传递。在本例中,您可以使用StringReader将JSON字符串转换为Reader

Gson gson = new Gson();
UnitRes res = gson.fromJson(new StringReader(response), new TypeToken<UnitRes>(){}.getType());

通过这些更改,您的代码应该能够成功地将JSON字符串解析为UnitRes对象。记住在UnitResUnit类中添加适当的getter和setter来访问解析后的数据。
此外,我注意到UnitRes类缺少unitssuccessloc字段的getter和setter。请确保也添加它们以正确访问这些值。

相关问题