[英]How can I convert json format sentence to another one by using C# regex for elasticsearch?
我有非常奇怪的 json 問題。 我需要將 UrlQueryString 轉換為 elasticsearch 的另一個標准。 當您查看下面的內容時,您會看到 2 json 。 我想改變 :
FROM "UrlQueryString": "checkinDate: 2020-07-01,checkoutDate: 2020-07-05,room: Y,Y,Y",
TO "UrlQueryString": {"checkinDate":"2020-07-01","checkoutDate":"2020-07-05","room": "Y,Y,Y"}
我怎樣才能做到這一點? 我認為我需要正則表達式或其他選項。 我也通過使用替換和刪除為此嘗試了很多次。
我有以下字符串json:
{
"LogLevel": "Information",
"CorrelationId": "44160536-a1e9-4a5b-a19d-9e2323ebfa7a",
"UrlMethod": "GET",
"Data": "",
"UrlQueryString": "checkinDate: 2020-07-01,checkoutDate: 2020-07-05,room: Y,Y,Y",
"UrlPath": /xxxx",
"LogSource": "source1",
"LogDate": "2019-12-28T07:39:24.2434156Z",
"Environment": "xxxx"
}
我想要的結果:
{
"LogLevel": "Information",
"CorrelationId": "44160536-a1e9-4a5b-a19d-9e2323ebfa7a",
"UrlMethod": "GET",
"Data": "",
"UrlQueryString": {"checkinDate":"2020-07-01","checkoutDate":"2020-07-05","room": "Y,Y,Y"},
"UrlPath": "/xxxx",
"LogSource": "source1",
"LogDate": "2019-12-28T07:39:24.2434156Z",
"Environment": "xxxx"
}
重要提示:不要忘記一些東西。 UrlQueryString 不是靜態的。 它完全是動態的。 在一天結束時;
"UrlQueryString": {"Parameter2": "bird"," anyvalue": "fly"}
或者
"UrlQueryString": {"Parameter2": "bird"," anyvalue": "fly","Parameter3": "bird"," anyvalue2": "fly"}
{
"LogLevel": "Information",
"CorrelationId": "44160536-a1e9-4a5b-a19d-9e2323ebfa7a",
"UrlMethod": "GET",
"Data": "",
"UrlQueryString": {"Parameter1": "Kuş"," test1": "1577518755769"},
"UrlPath": "/Json/AutoCompleteHotelCallBack",
"LogSource": "xxxrwr",
"LogDate": "2019-12-28T07:39:24.2434156Z",
"Environment": "xx-1"
}
你可能想得太復雜了。
您只需使用普通的字符串替換即可輕松逃脫。 而且也不會有風險,除非其中一個值可以以某種方式獲得與鍵相同的值。 不過好像不太可能。
也許不是最專業的解決方案,但我懷疑這就是你所追求的。 或者如果你是,我很抱歉。
因此,在該特定行上只需替換幾個字符串,就可以將其解析為 json。
例子:
.Replace("\"checkinDate: ", "{\"checkinDate:\"")
.Replace(",checkoutDate: ", "\",\"checkoutDate\":\"")
UrlQueryString
值不是有效的 json 或可以使用標准流程轉換為 json 的內容
問題:
{}
的字符串。,
和:
進行拆分,
但這不會像您那樣工作,
在您的值中以對象(JArray 或 JObject)作為值的可能性。 {"key": "val,ue"}
或{"key": { "key2": "value" } }
僅當您可以確定該字符串中只有鍵和字符串文字值時,您可以使用以下方法將該字符串轉換為 json。 {"key": "value", "key2": "val,ue2"}
string
轉換為按順序包含鍵和值的array
。Dictionary<string,string>
以便JsonConvert
可以轉換為對象。 public static object ConvertStringToJson (string convertThisToJson)
{
if (string.IsNullOrEmpty(convertThisToJson))
return JsonConvert.DeserializeObject<object>(JsonConvert.SerializeObject("{}"));
string[] splitStr = convertThisToJson.Split(':');
Dictionary<string, string> dict = new Dictionary<string, string>();
string key, value;
// First element will always be Key
key = splitStr[0];
// Everything in the middle will be Value/NextKey pair (not key/Value)
for (int i = 1; i < splitStr.Count() - 1; i++)
{
// You suggested your value could have commas ... thus LastIndexOf
int indexSplit = splitStr[i].LastIndexOf(",");
value = splitStr[i].Substring(0, indexSplit);
dict.Add(key, value.Trim());
key = splitStr[i].Substring(indexSplit + 1);
}
// Last element in its entirety will be value.
value = splitStr[splitStr.Length - 1];
dict.Add(key, value.Trim());
// You can choose to do either of these.
//return JsonConvert.SerializeObject(dict); // Do change the return type if you decide to go with this.
return JsonConvert.DeserializeObject<object>(JsonConvert.SerializeObject(dict));
}
並像這樣使用它
string str = "checkinDate: 2020-07-01,checkoutDate: 2020-07-05,room: Y,Y,Y";
object jsonObj = ConvertStringToJson(str);
Console.WriteLine(jsonObj.ToString()); // Print Json Object
Console.WriteLine(JsonConvert.SerializeObject(jsonObj)); // Print String
輸出
// Json Object.
{
"checkinDate": "2020-07-01",
"checkoutDate": "2020-07-05",
"room": "Y,Y,Y"
}
// String
{"checkinDate":"2020-07-01","checkoutDate":"2020-07-05","room":"Y,Y,Y"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.