2017-11-09 8 views
-1

일부 JSON을 구문 분석하려고합니다. JSON i에는 공백과 밑줄이 포함되어있어서 제거하고 싶습니다. 다음 정규식으로 C#에서 일치하는 값 regex를 수정하는 방법

{"No_":"SL00101","Description":"Logies_3","Description_2":"","Customer No_":"1234","Name":"SomeName"} 

내가는

([a-zA-Z0-9_ ]*\":) 

내가 어떤 밑줄이나 공백을하지 변수를 변경하려면 일치합니다. 그래서 : No_는 No_이 CustomerNo된다 없음

그리고

고객이된다 없습니다.

대체를 시도했지만 바꿀 수는 있지만 일치하는 값을 수정하는 방법을 찾을 수 없습니다.

예를

var newJason = Regex.Replace(json, "(?<variableName>([a-zA-Z0-9_ ]*\":))", "${variableName}".Replace(" ", string.Empty)); 
+0

역 직렬화 당신은 Regex.Replace''봤어? –

+2

JSON 구문 분석기를 사용하여 원하는 결과와 직렬화 결과를 변환하는 것이 더 낫습니다. 그런 식으로 식별자 란 무엇이고 가치는 무엇인지 알아낼 필요가 없습니다. (JSON은 공식적인 의미에서 정규 표현식을 사용하지 않으므로 정규 표현식을 사용하여이를 안정적으로 처리 할 수 ​​없습니다.) – Richard

+0

* 왜 * 밑줄을 대체 하시겠습니까? 아마도 이것을 수업에 매핑하는 데 문제가 있습니까? [JsonProperty] (예 : https://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonPropertyAttribute__ctor_1.htm)와 같은 속성을 통해 대체 매핑을 지정할 수 있습니다. 밑줄을 처리하기 위해 자신의 [이름 지정 전략] (https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Serialization_NamingStartgy.htm)을 지정할 수도 있습니다. 대체가 필요하지 않습니다. –

답변

-1

를 들어이 당신을 도울 수 있습니다

var jsonString = ""; 
var obj = JSON.parse(json); 
jsonString += "{"; 
for (var key in obj) { 
    jsonString += '"' + key.replace("/_/g","").replace("/ /g","") + ":" + obj[key] + '",' 
} 
jsonString = jsonString.slice(0,-1) //we remove the last comma (,) 
jsonString += "}";     //and we close the future json object 

당신은 다음

1

그래서 당신은 당신의 JSON 속성을 이름을 변경하려는 최종 JSON 개체를 얻을 수있는 var resultJsonObject = JSON.parse(jsonString)을 추가 할 수 있습니다, 아마 당신이 C에서 괜찮은 이름을 원하기 때문에 #

dd Newtonsoft.Json Library NuGet을 통해 JsonProperty 속성으로 속성 이름을 설정하십시오.

public class YourClass 
{ 
    [JsonProperty(PropertyName = "No_")] 
    public string No{ get; set; } 

    [JsonProperty(PropertyName = "Customer No_")] 
    public string CustomerNo{ get; set; } 
} 

이제 명명 규칙에 따라 속성을 사용하여 C# 클래스에 deserialize 할 수 있습니다.

var yourClassInstance = Newtonsoft.Json.JsonConvert.DeserializeObject<YourClass>("yourJsonString");