如何解析 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"}}
我有 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"}}