这几天在调接口的时候,需要解析第三方提供的字符串。
依赖的jar包
gson-2.2.4.jar
头部引入
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
这是他们丢过来的字符串。
[
{
"attributes": {
"type": "OrderOrContract__c",
"url": "/services/data/v40.0/sobjects/OrderOrContract__c/a140k000000A1MyAAK"
},
"RecordTypeId": "01228000000LiKwAAK",
"TheCenterCode__c": "GY",
"Center__c": "圆融时代中心",
"Account__c": "0010k00000GkYinAAF",
"Contact__c": "0030k00000JDDadAAH",
"PaymentType__c": "现结",
"PaymentChannel__c": "支付宝",
"SourcePart__c": "官网",
"FirstDate__c": "2017-08-18T10:30:00.000+0000",
"KeyCardDeposit__c": 100.0,
"PreMonthNotice__c": 1,
"PaymentSettlement__c": "押三付一",
"Deposit__c": 1000.0,
"Remark__c": "1234567@163.com",
"UseFromDate__c": "2017-08-18",
"UseEndDate__c": "2018-08-17",
"BillingCycle__c": 2,
"ContractProductType__c": "移动办公",
"EffectiveDate__c": "2017-08-18",
"SpecilCondition__c": "1234567@163.com",
"TaxRate__c": null,
"IsRenew__c": true,
"WebNum__c": "1",
"Id": "a140k000000A1MyAAK",
"IsComplete__c": true
}
][
{
"attributes": {
"type": "OrderOrContractProduct__c",
"url": "/services/data/v40.0/sobjects/OrderOrContractProduct__c/a150k000000Az4OAAS"
},
"WebsitePrice__c": 1200.0,
"ListPrice__c": 799.0,
"Product__c": "a0v0k000000ACg1AAG",
"FloorPrice__c": 2200.0,
"SaleQty__c": 12.0,
"PeopleNum__c": 3,
"MeetingRequire__c": "123",
"Desc__c": "123",
"OrderOrContract__c": "a140k000000A1MyAAK",
"IsNeedInvoice__c": "否",
"SalesPrice__c": 799.0,
"DiscountReason__c": "131",
"BookEndTime__c": "2018-09-18T10:30:00.000+0000",
"BookStartTime__c": "2017-08-18T10:30:00.000+0000",
"FreeQty__c": 1.0,
"PromotionIDs__c": "a1T0k0000004NX8EAM",
"Id": "a150k000000Az4OAAS"
},
{
"attributes": {
"type": "OrderOrContractProduct__c",
"url": "/services/data/v40.0/sobjects/OrderOrContractProduct__c/a150k000000Az4PAAS"
},
"WebsitePrice__c": 1200.0,
"ListPrice__c": 799.0,
"Product__c": "a0v0k000000ACg6AAG",
"FloorPrice__c": 2200.0,
"SaleQty__c": 12.0,
"PeopleNum__c": 3,
"MeetingRequire__c": "123",
"Desc__c": "123",
"OrderOrContract__c": "a140k000000A1MyAAK",
"IsNeedInvoice__c": "否",
"SalesPrice__c": 799.0,
"DiscountReason__c": "",
"BookEndTime__c": "2018-09-18T10:30:00.000+0000",
"BookStartTime__c": "2017-08-18T10:30:00.000+0000",
"FreeQty__c": 1.0,
"PromotionIDs__c": "a1T0k0000004NX8EAM",
"Id": "a150k000000Az4PAAS"
}
]
楼主需要拿到每条数据下的 Id 。
然后懵逼了,这也不是标准的Json字符串格式。
他给的格式是[{}][{},{}]这种格式。
那怎么办
后来想到一个方法
message.replaceFirst("]","];")
这样就成了[{}];[{},{}]这种格式
通过;进行分割
String[] chrstr = str1.split(";");
这样
chrstr[0] = [{}],
chrstr[1] = [{},{}],
总算分割成标准的Json数组格式
JsonArray obj1 = new JsonParser().parse(chrstr[1]).getAsJsonArray();
接下来就是循环取出Id
for(int i = 0 ; i <obj1.size() ; i++){ JsonObject obj2 = obj1.get(i).getAsJsonObject(); cid += obj2.get("Id").getAsString()+","; }
System.out.println(pid); System.out.println(cid);
pid对应的是chrstr[0]里面的id ,取值的方法与charstr[1]的方法一样,都不用循环。
然后咱们打印一下结果
a140k000000A1MyAAK
a150k000000Az4OAAS,a150k000000Az4PAAS,
结语就是:充分发挥想象力,将非标准的JSON转为标准格式,再进行操作。