2017-11-09 8 views
-1

JSONを受け取るのを解析しようとしています。私が受け取るJSONには、空白とアンダースコアが含まれています。これは取り除きたいものです。次の正規表現でC#で一致した値の正規表現を修正する方法

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

私は任意のアンダースコアまたは空白を持たないために、変数を変更したい

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

に一致します。 ので: NO_はCustomerNoなりNO_ませ

そして

カスタマーなりません。

私は置換と置換を試しましたが、一致する値を変更する方法が見つかりません。例えば

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_NamingStoregy.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 

あなたはその後、SOあなたはJSONのプロパティの名前を変更したい、最終的なJSONオブジェクト

1

を取得するために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#クラスにデシリアライズできるようになりました。

var yourClassInstance = Newtonsoft.Json.JsonConvert.DeserializeObject<YourClass>("yourJsonString"); 
関連する問題