首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析路径索引器时的JObject SelectToken意外字符

解析路径索引器时的JObject SelectToken意外字符
EN

Stack Overflow用户
提问于 2021-10-08 02:49:01
回答 1查看 1K关注 0票数 1

我需要解析一个API json响应来提取某个值。直到今晚,这种方法一直对我很有效,没有问题。当试图执行此代码时:

代码语言:javascript
复制
JObject oR = JObject.Parse(response2.Content);                   

if (oR.SelectToken("[response][0][assignment][current][channelId]") != null)
{
    ChannelId = oR.SelectToken("[response][0][assignment][current][channelId]").ToString();
}

我收到这个错误:

代码语言:javascript
复制
Unexpected character while parsing path indexer: r

下面是我试图解析的api的完整json响应:

代码语言:javascript
复制
{
    "response": [
        {
            "id": 268633,
            "parentOrderId": 0,
            "orderTypeCode": "SO",
            "reference": "#351569",
            "version": 3,
            "state": {
                "tax": "READY"
            },
            "orderStatus": {
                "orderStatusId": 41,
                "name": "Ready to Ship"
            },
            "tax": {
                "errors": []
            },
            "orderPaymentStatus": "PAID",
            "stockStatusCode": "SOA",
            "allocationStatusCode": "AAA",
            "shippingStatusCode": "SNS",
            "placedOn": "2021-10-07T18:53:54.000-05:00",
            "createdOn": "2021-10-07T18:54:12.000-05:00",
            "updatedOn": "2021-10-07T18:57:43.000-05:00",
            "createdById": 4,
            "priceListId": 3,
            "priceModeCode": "EXC",
            "delivery": {
                "deliveryDate": "2021-10-06T19:00:00.000-05:00",
                "shippingMethodId": 9
            },
            "invoices": [
                {
                    "invoiceReference": "",
                    "taxDate": "2021-10-07T00:00:00.000-05:00",
                    "dueDate": "2021-10-06T19:00:00.000-05:00"
                }
            ],
            "currency": {
                "accountingCurrencyCode": "USD",
                "orderCurrencyCode": "USD",
                "exchangeRate": "1.000000",
                "fixedExchangeRate": true
            },
            "totalValue": {
                "net": "14.10",
                "taxAmount": "1.16",
                "baseNet": "14.10",
                "baseTaxAmount": "1.16",
                "baseTotal": "15.26",
                "total": "15.26"
            },
            "assignment": {
                "current": {
                    "staffOwnerContactId": 0,
                    "projectId": 0,
                    "channelId": 3,
                    "leadSourceId": 0,
                    "teamId": 0
                }
            },
            "parties": {
                "customer": {
                    "contactId": 748240,
                    "addressFullName": "John Doe",
                    "companyName": "",
                    "addressLine1": "225 N First ST",
                    "addressLine2": "",
                    "addressLine3": "My Town",
                    "addressLine4": "Texas",
                    "postalCode": "76082-2583",
                    "country": "United States",
                    "telephone": "+1900MIXALOT",
                    "mobileTelephone": "",
                    "fax": "",
                    "email": "john.doe@yahoo.com",
                    "countryId": 223,
                    "countryIsoCode": "US",
                    "countryIsoCode3": "USA"
                },
                "delivery": {
                    "addressFullName": "John Doe",
                    "companyName": "",
                    "addressLine1": "225 N First ST",
                    "addressLine2": "",
                    "addressLine3": "My Town",
                    "addressLine4": "Texas",
                    "postalCode": "76082-2583",
                    "country": "United States",
                    "telephone": "+1900MIXALOT",
                    "mobileTelephone": "",
                    "fax": "",
                    "email": "john.doe@yahoo.com",
                    "countryId": 223,
                    "countryIsoCode": "US",
                    "countryIsoCode3": "USA"
                },
                "billing": {
                    "contactId": 748240,
                    "addressFullName": "John Doe",
                    "companyName": "",
                    "addressLine1": "225 N First ST",
                    "addressLine2": "",
                    "addressLine3": "My Town",
                    "addressLine4": "Texas",
                    "postalCode": "76082-2583",
                    "country": "United States",
                    "telephone": "+1900MIXALOT",
                    "mobileTelephone": "",
                    "fax": "",
                    "email": "john.doe@yahoo.com",
                    "countryId": 223,
                    "countryIsoCode": "US",
                    "countryIsoCode3": "USA"
                }
            },
            "orderRows": {
                "600995": {
                    "orderRowSequence": "10",
                    "productId": 30727,
                    "productName": "Mens Wrangler Sport Western Plaid Snap - M",
                    "productSku": "395802",
                    "quantity": {
                        "magnitude": "1.0000"
                    },
                    "itemCost": {
                        "currencyCode": "USD",
                        "value": "11.2500"
                    },
                    "productPrice": {
                        "currencyCode": "USD",
                        "value": "24.9900"
                    },
                    "discountPercentage": "0.00",
                    "rowValue": {
                        "taxRate": "9.5000",
                        "taxCode": "T",
                        "taxCalculator": "manual",
                        "rowNet": {
                            "currencyCode": "USD",
                            "value": "4.9900"
                        },
                        "rowTax": {
                            "currencyCode": "USD",
                            "value": "0.4000"
                        },
                        "taxClassId": 2
                    },
                    "productOptions": {
                        "Top Size": "M",
                        "Color": "Multi"
                    },
                    "nominalCode": "4000",
                    "composition": {
                        "bundleParent": false,
                        "bundleChild": false,
                        "parentOrderRowId": 0
                    },
                    "externalRef": "10197546795147",
                    "clonedFromId": 0
                },
                "600997": {
                    "orderRowSequence": "30",
                    "productId": 1001,
                    "productName": "Shipping: UPS SurePost",
                    "productSku": "",
                    "quantity": {
                        "magnitude": "1.0000"
                    },
                    "itemCost": {
                        "currencyCode": "USD",
                        "value": "0.0000"
                    },
                    "productPrice": {
                        "currencyCode": "USD",
                        "value": "9.1100"
                    },
                    "discountPercentage": "0.00",
                    "rowValue": {
                        "taxRate": "9.5000",
                        "taxCode": "T",
                        "taxCalculator": "manual",
                        "rowNet": {
                            "currencyCode": "USD",
                            "value": "9.1100"
                        },
                        "rowTax": {
                            "currencyCode": "USD",
                            "value": "0.7600"
                        },
                        "taxClassId": 2
                    },
                    "nominalCode": "4030",
                    "composition": {
                        "bundleParent": false,
                        "bundleChild": false,
                        "parentOrderRowId": 0
                    },
                    "clonedFromId": 0
                },
                "600996": {
                    "orderRowSequence": "20",
                    "productId": 1000,
                    "productName": "Coupon: PDJA046209",
                    "productSku": "",
                    "quantity": {
                        "magnitude": "1.0000"
                    },
                    "itemCost": {
                        "currencyCode": "USD",
                        "value": "0.0000"
                    },
                    "productPrice": {
                        "currencyCode": "USD",
                        "value": "0.0000"
                    },
                    "discountPercentage": "0.00",
                    "rowValue": {
                        "taxRate": "0.0000",
                        "taxCode": "-",
                        "taxCalculator": "brightpearl",
                        "rowNet": {
                            "currencyCode": "USD",
                            "value": "0.0000"
                        },
                        "rowTax": {
                            "currencyCode": "USD",
                            "value": "0.00"
                        },
                        "taxClassId": 1
                    },
                    "productOptions": {
                        "Top Size": "S",
                        "Color": "Green"
                    },
                    "nominalCode": "4020",
                    "composition": {
                        "bundleParent": false,
                        "bundleChild": false,
                        "parentOrderRowId": 0
                    },
                    "clonedFromId": 0
                }
            },
            "warehouseId": 3,
            "acknowledged": 0,
            "costPriceListId": 1,
            "historicalOrder": false,
            "externalRef": "3912489140363",
            "installedIntegrationInstanceId": 484,
            "orderWeighting": 100
        }
    ]
}

不幸的是,我无法控制从webservice API返回的json。我所能挖掘到的最好的一点是,其中一个json键有问题,但我似乎不知道如何修复它或解释它。

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-08 02:59:56

正确的JSONPath语法是:

代码语言:javascript
复制
response[0].assignment.current.channelId

...or使用引用的属性名称:

代码语言:javascript
复制
['response'][0]['assignment']['current']['channelId']

就我个人而言,我更喜欢前一种语法,因为它更简洁,更容易阅读。

此外,您的程序也是低效的,因为您要对JSONPath进行两次评估。相反,使用C#的is var操作符来存储结果:

代码语言:javascript
复制
JObject oR = JObject.Parse(response2.Content);                   

if (oR.SelectToken("response[0].assignment.current.channelId") is JToken channelIdToken)
{
    this.ChannelId = channelIdToken.ToString();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69489910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档