使用Gson解析字符串

这几天在调接口的时候,需要解析第三方提供的字符串。

依赖的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转为标准格式,再进行操作。



 
 
 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值