如何解析 apex 中的 json 字符串

How to parse json string in apex

我有 json 下面这样的字符串

{"0":{"in":"mmm","loc":"1234"},"1":{"in":"mmm","loc":"1234"}}

现在我需要像这样解析它们

in | loc
---------
mmm| 1234
mmm| 1234

到目前为止我做到了

public with sharing class Search 
{ 
    public String strTag {get;set;}
    public String strlocation {get;set;}
    public String result {get;set;}

    public PageReference find() {         

    HttpRequest req = new HttpRequest();
    HttpResponse res = new HttpResponse();
    Http http = new Http();

    req.setEndpoint('http://test.3spire.net/index.php?in='+strTag+'&loc='+strlocation);
    req.setMethod('GET');

    //these parts of the POST you may want to customize
    req.setCompressed(false);
    req.setBody('key1=value1&key2=value2');
    req.setHeader('Content-Type', 'application/x-www-form-urlencoded');  

    try {
        res = http.send(req);       
    } catch(System.CalloutException e) {
        system.debug('Callout error: '+ e);
        result = ''+e;
    }

    Result results = (Result) JSON.deserialize(res.getBody(),ResultSet.class);

    result = res.getBody();
    system.debug(res.getBody());
        return null;
    }

    public class ResultSet{       
        public List<Result> resultSet;
    }

    public class Result
    {
        public String ins;
        public String loc;
    }
}

但是它 returns

System.TypeException:从运行时类型 Search.ResultSet 到 Search.Result

的无效转换

我该如何解决这个问题

提前致谢

您正在呼叫 JSON.deserialize(res.getBody(),ResultSet.class)。第二个参数 ResultSet 是您希望结果成为的 Apex 对象类型。但是随后您尝试将其转换为 Result 类型。

要么

Result results = JSON.deserialize(res.getBody(), Result.class);

ResultSet results = JSON.deserialize(res.getBody(), ResultSet.class);

在您的情况下,根据 JSON,您似乎想要第二个选项。但是,您的 JSON 与您的 ResultSet class 也不完全匹配。您的 JSON 是地图,而不是列表。此外,"in" 和 "ins" 之间存在字段不匹配。这个 JSON 将匹配您的结果集 class:

{{"ins":"mmm","loc":"1234"},{"ins":"mmm","loc":"1234"}}