JSON 文字列を、Lisp (aml) で評価するために使用できる文字列形式に変換しようとしています。
f.eks を変換したい:
{"id": 1, "name": "Foo", "price": 123, "tags": ["Bar","Eek"], "stock": {"warehouse": 300, "retail": 20}}
に:
(json-object (json-object-property "id" <1>) (json-object-property "name" <"Foo">) (json-object-property "price" <123>) (json-object-property "tags"(json-array (list "Bar" "Eek")) (json-object-property "stock"(json-object (json-object-property "warehouse" <300>) (json-object-property "retail" <20>)))))
最初に C# と Regex を使用してそれを実行し、次にそれを Lisp/aml に「変換」しようとしています。だから私の質問は本当にです:
C#で正規表現を使用してこれを行うには? 私は多くのことを試しましたが、単語以外の文字を含む文字列、または少数の "(".
これまで正規表現を使用したことがないため、コードはあまりスマートに見えません。
string input = @"{""id"": 1,""name"": ""Foo"",""price"": 123,""tags"": [""Bar"",""Eek""],""stock"": {""warehouse"": 300,""retail"": 20}}""";
string pattern = @"[}]";
string replacement = ")";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
pattern = @"((?<word1>""\w+"")(:\s)(?<word2>""\w+""|\d+))";
replacement = @"(json-object-property ${word1} <${word2}>)";
rgx = new Regex(pattern);
result = rgx.Replace(result, replacement);
pattern = @"[]]";
replacement = "))";
rgx = new Regex(pattern);
result = rgx.Replace(result, replacement);
pattern = @"[{]";
replacement = "(json-object ";
rgx = new Regex(pattern);
result = rgx.Replace(result, replacement);
pattern = @"[[]";
replacement = "(json-array (list ";
rgx = new Regex(pattern);
result = rgx.Replace(result, replacement);
pattern = @"[,]";
replacement = " ";
rgx = new Regex(pattern);
result = rgx.Replace(result, replacement);
pattern = @"(?<word1>""\w+"")(:\s)";
replacement = @"(json-object-property ${word1}";
rgx = new Regex(pattern);
result = rgx.Replace(result, replacement);
Console.WriteLine(result);