mithunnivas Ответов: 0

Newtonsoft json выдает ошибку при выборе токена с десятичным значением


когда я пытаюсь использовать
foreach (JObject ii in jj.SelectTokens("$[?(@.total_amount > 2)]"))
список фильтруется правильно для целых чисел. но если json содержит числа с десятичной дробью, например 25.3 или что-то еще, я получаю исключение, входная строка не была в правильном формате.



образец в формате JSON:
[[{"doc_code":"123","doc_type":"update inventory","line_number":"1","doc_date":"6/15/2018","Cost Center":"Iconic Solutions","tax_calc_date":"","vendor_id":"Iconic Solutions","use_id":"1","tax_code":"tc105","item_id":"1","description":"desc1","quantity":"1","discount":"","tax_included":"","taxable_amount":"100","charged_tax":"","total_amount":"27.5","Ref1":"","Ref2":"","RevAcct":"","DestAddress":"103 madras","DestCity":"","DestRegion":"","DestPostalCode":"235692","DestCountry":"","OrigAddress":"86nasdnv","OrigCity":"","OrigRegion":"","OrigPostalCode":"23654","OrigCountry":"","DestLocationCode":"","OrigLocationCode":"","PurchaseingAgentCode":"","PurchaseOrderNo":"","address":"","city":"","region":"","postal_code":"","country":"","import_id":"72","company_id":"2","costcenter_id":"","marked_for_allocation":"","is_allocated":"","allocation_method":"","calculated_tax":"","marked_for_review":"","line_item_status":"","warning_status":"","insert_user":"","cutt_line_item_number":"","processing_stage":"","user_id":"21","cut_proc_number":"","variance":"0","purpose_id":"0","error_code_id":"0"}]]


Что я уже пробовал:

foreach (JObject lineItem in lineItem1.SelectTokens("$[?(@.total_amount > 1)]"))


это код, который я использовал и не смог заставить его работать с json prop total_amount с 25.6 или любым десятичным значением

Afzaal Ahmad Zeeshan

Что такое тип lineItem1? И как вы разбираете объекты?

Это похоже на несоответствие типов, возможно, вы пытаетесь проанализировать данные, которые не соответствуют типу в типе объекта.

если json содержит числа с десятичной дробью, например 25.3 или что-то еще, я получаю исключение, входная строка не была в правильном формате.

Однако он работает, когда у вас есть целое число, поэтому просто убедитесь, что у вас нет типа объекта с членом int.

https://stackoverflow.com/questions/16398352/strange-json-net-exception-input-string-was-not-in-a-correct-format

Richard Deeming

Работает ли он, если вы включаете десятичную точку в фильтр?

lineItem1.SelectTokens("$[?(@.total_amount > 1.0)]")

mithunnivas

да, это сработало. к сожалению, я был нездоров и не мог ответить.
Я попробовал вышеприведенное решение сразу после публикации этой темы и получил его работу. большое вам спасибо за помощь.
newtonsoft json net автоматически определяет условие на основе типа.

mithunnivas

Здравствуйте, сэр. даже сейчас это не работает. когда я передаю 1.0 или 3.56, он просто берет первую цифру и сравнивает ее. ничего больше. все еще торчу здесь.

0 Ответов