我想从以下位置更改JSON格式:
a:3:{s:10:"modulename";s:6:"assign";s:10:"instanceid";s:1:"3";s:4:"name";s:18:"Assignent_test_two";}
收件人:
{"modulename":"assign","instanceid":"3","name":"Assignent_test_two"}
通过C#或Python进行操作的任何想法
谢谢
答案 0 :(得分:1)
您输入的字符串是PHP Serialize的结果。采用以下格式:
a:size:{key definition;value definition;(repeated per element)}
。
数组值可以是整数或字符串。在这里,我们假设它始终是字符串。根据此规则,我们可以使用:"(\w+)";
找到该值。
string pattern = @":""(\w+)"";";
string input = @"a:3:{s:10:""modulename"";s:6:""assign"";s:10:""instanceid"";s:1:""3"";s:4:""name"";s:18:""Assignent_test_two"";}";
var originalArray = Regex.Matches(input, pattern)
.Cast<Match>()
.Select(x => x.Groups[1].Value)
.ToArray();
// -> {"modulename", "assign", "instanceid", "3", "name", "Assignent_test_two"}
我们必须从原始数据数组2到2中选择值,以组成字典:
var projectionToExpectedResult =
Enumerable.Range(0, originalArray.Length / 2)
.ToDictionary(i => originalArray[i * 2], j => originalArray[j * 2 + 1]);
序列化序列化可得到预期结果:
var serilisedResult = JsonConvert.SerializeObject(projectionToExpectedResult);
// -> {"modulename":"assign","instanceid":"3","name":"Assignent_test_two"}
如果输入文件中有int
个数据。它们看起来像i:1;s:5:"value";
。正则表达式将为:"?(\w+)"?;
。
答案 1 :(得分:0)
您可以通过string.Split()
进行操作,因为它看起来不像json
ex-
string jsonNew = "{";
string jsonString = "{s:10:\"modulename\";s:6:\"assign\";s:10:\"instanceid\";s:1:\"3\";s:4:\"name\";s:18:\"Assignent_test_two\";}" // I have Escaped string assuming you are getting the same
var strArr = jsonString.Split(';');
foreach(var str in strArr){
var attr = str.Split(':')[2];
if(jsonNew[jsonNew.Length-1] == ":"){
jsonNew = jsonNew + attr + ",";
}
else if(jsonNew[jsonNew.Length-1] == ","){
jsonNew = jsonNew + attr + ":";
}
}
if(jsonNew[jsonNew.Length-1] == ","){
jsonNew[jsonNew.Length-1] = "}";
}
我认为可以执行上述操作将上述字符串解析为json。告诉我这个想法是否可行