如何在JSON中转换字符串的一部分?

时间:2019-05-05 00:02:48

标签: java json string

我有一个带URL的字符串和其他一些“ JSON格式”的文本。像这样:

String result = "https://somesite.com/generic-url/11 {'id':11,'checked':true,'geo':'0'}"

我知道这很奇怪...但是我必须丢弃字符串中的URL,并将其余数据转换为JSONObject。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

在将JSON转换为JSONObject方面,有几个可用的库,我常用的两个是Google的GSON libraryjackson-databind

就从字符串中提取JSON而言,您可以使用正则表达式来抓取第一个'{'及其后的所有内容作为捕获组的一部分,我希望这会起作用。 { "_id" : "1", "tipos" : [ { "tipo" : "TIPO_01", "total" : 13.0 }, { "tipo" : "TIPO_02", "total" : 2479.0 }, { "tipo" : "TIPO_03", "total" : 12445.0 }, { "tipo" : "TIPO_04", "total" : 12445.0 }, { "tipo" : "TIPO_05", "total" : 21.0 }, { "tipo" : "TIPO_06", "total" : 21590.0 }, { "tipo" : "TIPO_07", "total" : 1065.0 }, { "tipo" : "TIPO_08", "total" : 562.0 } ], "totalGeneral" : 50620.0 之类的方法可能适用于您的情况。

以GSON为例:

^[^\{]*(.+)

答案 1 :(得分:1)

    final String regex = ".*(\\{.*\\}$)";
    final String string = "https://somesite.com/generic-url/11 {\"id\":11,\"checked\":true,\"geo\":\"0\"}";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);
    matcher.find();
    String json = matcher.group(1);

    ObjectMapper mapper = new ObjectMapper();
    JsonNode jsonNode = mapper.readTree(json);

答案 2 :(得分:1)

使用RegexJSON.org怎么样?

public class Main {
    public static void main(String[] args) {

        String line = "https://somesite.com/generic-url/11 {'id':11,'checked':true,'geo':'0'}"; 
        String pattern = "\\{.*\\}$";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);

        if (m.find()) {
            JSONObject json = new JSONObject(m.group(0));
            System.out.println(json);
            System.out.println(json.getLong("id"));
            System.out.println(json.getBoolean("checked"));
            System.out.println(json.getInt("geo"));
        } else {
            System.out.println("NO MATCH");
        }
    }
}

控制台输出:

{"geo":"0","checked":true,"id":11}
11
true
0