将 Json 文件转换为类对象,但它的格式很奇怪

问题描述 投票:0回答:2

你好,这是我的代码:

public class Fencers{
    private String name,nation;
    private int id;

    public Fencers(String name, String nation,int id) {
        this.name = name;
        this.nation = nation;
        this.id = id;
    }

    @Override
    public String toString() {
        return
                id+" "+name+" "+nation+"\n";
    }
}

这是主要的:

class Main{
    public static void main(String[] args){
         String json = "{\"name\":\"m\",\"nation\":\"egy\",\"id\":100}{\"name\":\"342\",\"nation\":\"egy\",\"id\":120}"
    }
}

我想把

json
变成一个类对象,但它给了我错误,因为它的格式很奇怪 该怎么做:掌心:

java json gson
2个回答
1
投票

所以这里有两个问题:

  1. json到java对象应该怎么转换?比如使用jackson(ObjectMapper)?
  2. 示例中的json无效:
{"name":"m","nation":"egy","id":100}{"name":"342","nation":"egy","id":120}

所以在它可以从 json 转换为 java 对象之前,它必须是有效的 json。

为什么奇怪的格式?能从源头上解决吗?如果是,则 (2) 已解决,从必须从中读取的任何地方获取有效的 json。如果不是,则必须先由您的程序将其转换为有效的 json,然后再将 json 反序列化为带有 jackson 等库的 java 对象。

如果您的程序在反序列化之前将输入转换为有效的 json,假设所有记录都具有示例中给出的格式,并假设键/值对不包含圆括号或方括号,那么一个真正快速的解决方法是一个辅助方法,比如:

static String toValidJson(String in) {
    return "[" + in.replace("}{", "},{") + "]";
}

这里的想法是在对象之间放置一个逗号并将整个事物封闭在一个数组中。然后可以适当反序列化成数组、列表等

编辑

Gson 库被用于解析,所以把它们放在一起,它应该是这样的:

class Main {
    public static void main(String[] args) {
        // raw data
        String raw = "{\"name\":\"m\",\"nation\":\"egy\",\"id\":100}{\"name\":\"342\",\"nation\":\"egy\",\"id\":120}";

        // valid json
        String json = toValidJson(raw);

        // parse it
        Gson gson = new Gson();
        Fencers[] fencers = gson.fromJson(json, Fencers[].class);

        // do something with the array of fencers
        for (Fencer f : fencers) {
            // ...
        }
    }

    static String toValidJson(String in) {
        return "[" + in.replace("}{", "},{") + "]";
    }
}

1
投票

您的字符串无法正常工作:

String json = "{"name":"m","nation":"egy","id":100},"name":"342","nation":"egy","id":120}"

应该是

String json = "{\"name\":\"m\",\"nation\":\"egy\",\"id\":100}";

请注意,如果您想要一个对象列表,则 json 符号不是

{"name":"m","nation":"egy","id":100}{"name":"342","nation":"egy","id":120}

但是

[{"name":"m","nation":"egy","id":100},{"name":"342","nation":"egy","id":120}]

在这种情况下你应该写:

String json = "[{\"name\":\"m\",\"nation\":\"egy\",\"id\":100},{\"name\":\"342\",\"nation\":\"egy\",\"id\":120}]";
© www.soinside.com 2019 - 2024. All rights reserved.