如何在 C# 中获取 json 属性的特定部分?
Posted
技术标签:
【中文标题】如何在 C# 中获取 json 属性的特定部分?【英文标题】:How to get specific part of json property in c#? 【发布时间】:2020-06-10 08:40:19 【问题描述】:对这个json做一个循环,我总是需要能够从“value_name”中得到这个值“8047”:“https://www.portalinmobiliario.com/venta/departamento/estacion-central-metropolitana/8047-edificio-caiquen-nva”
你可以在 json 中看到,这有点大,所以如果你使用 ctrl + F 并查找它会更容易,但我放了完整的 json,这样你就可以很好地参考变量的方式我实际上需要得到。
"results":[
"id":283495,
"user":
"id":204841198,
"nickname":"RICARDOCAMPOSANO",
"registration_date":"2016-02-01T15:18:01Z",
"first_name":"Ricardo",
"last_name":"Camposano",
"country_id":"CL",
"email":"ricardo.camposano26@gmail.com",
"phone":,
"alternative_phone":,
"identification":,
"user_type":"normal",
"tags":[],
"points":0,
"site_id":"MLC",
"permalink":"http://perfil.mercadolibre.cl/RICARDOCAMPOSANO",
"secure_email":"rcampos.l4jn3q@mail.mercadolibre.cl"
,
"item":
"id":"MLC462815278",
"site_id":"MLC",
"title":"Edificio Caiquén",
"subtitle":"",
"seller_id":330106543,
"category_id":"MLC157523",
"domain_id":"MLC-DEVELOPMENT_APARTMENTS_FOR_SALE",
"price":1885,
"base_price":1885,
"original_price":0,
"currency_id":"CLF",
"price_conversions":[],
"initial_quantity":330,
"available_quantity":330,
"sold_quantity":0,
"buying_mode":"classified",
"listing_type_id":"silver",
"start_time":"2018-07-12T18:50:09Z",
"stop_time":"2018-08-13T04:00:00Z",
"condition":"new",
"permalink":"http://departamento.mercadolibre.cl/MLC-462815278-edificio-caiquen-_JM",
"thumbnail":"http://www.mercadolibre.com/jm/img?s=STC\u0026v=I\u0026f=processing_image_es.jpg",
"secure_thumbnail":"https://www.mercadolibre.com/jm/img?s=STC\u0026v=I\u0026f=processing_image_es.jpg",
"pictures":[],
"video_id":"",
"descriptions":[],
"seller_address":,
"seller_contact":,
"location":,
"attributes":[
"id":"ITEM_CONDITION",
"name":"Condición del ítem",
"value_id":"2230284",
"value_name":"Nuevo"
,
"id":"DOWN_PAYMENT",
"name":"Pie",
"value_id":"",
"value_name":"10 %"
,
"id":"RESERVATION_FEE",
"name":"Monto reserva",
"value_id":"",
"value_name":"0 UF"
,
"id":"CMG_SITE",
"name":"Sitio de origen",
"value_id":"",
"value_name":"POI"
,
"id":"CANONICAL_URL",
"name":"Url canónica",
"value_id":"",
"value_name":"https://www.portalinmobiliario.com/venta/departamento/estacion-central-metropolitana/8047-edificio-caiquen-nva"
,
,
,
,
,
,
,
,
,
,
],
"variations":null,
"listing_source":"portalinmobiliario",
"status":"active",
"tags":[
],
"parent_item_id":"",
"automatic_relist":false,
"date_created":"2018-07-12T18:50:17Z",
"last_updated":"2018-07-12T18:50:17Z"
,
"variation":,
"created_at":"2018-07-12T18:50:22Z",
"is_guest":false
]
在 javascript 中,我可以这样做:
var id = id_proyecto = valor.item.attributes[4].value_name.match(/\/(\d+)-[^/]+$/)[1];
但我不知道如何在 c# 中做到这一点。我认为实际上更复杂。
任何线索如何解决这个问题?
【问题讨论】:
创建仅具有 value_name 属性的类,然后将您的 json 序列化为该类对象,然后循环并使用正则表达式 您好,您可以查看***.com/questions/11260631/… 了解如何将 JSON 转换为 C# 对象。在此之后,您可以在docs.microsoft.com/en-us/dotnet/api/… 处查看正则表达式的文档,了解如何在 C# 中使用正则表达式。 您找到解决问题的方法了吗? 【参考方案1】:这是一个不使用正则表达式但使用IndexOf(...)
和Substring(...)
的解决方案
var value = valor.item.attributes[4].value_name;
var idxStart = value.LastIndexOf('/');
var idxEnd = value.IndexOf('-', idxStart);
var id = int.Parse(value.Substring(idxStart + 1, idxEnd - idxStart -1));
...你可以使用正则表达式
var value = valor.item.attributes[4].value_name;
var id = int.Parse(Regex.Match(value, @"/(\d+)\-[^/]+$").Groups[1].Value);
【讨论】:
是否需要导入任何库才能在 c# 控制台应用程序中使用 Regex? 只需将using System.Text.RegularExpressions
添加到类文件的顶部即可。无需其他参考
试过这个:var value = valor.item.attributes[4].value_name; var id= int.Parse(Regex.Match(value, @"/(\d+)\-[^/]+$").Groups[1].Value);并得到这个错误'System.Text.RegularExpressions.Regex.Match(string, string)' has some not valid arguments
刚刚将“value”变量的数据类型更改为字符串,它可以工作,感谢您的帮助以上是关于如何在 C# 中获取 json 属性的特定部分?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 jQuery DataTables 获取 JSON 的某些部分