我有一个字符串,我从一个Web服务,它看起来像这样得到:转换格式化字符串(不是有效的JSON),以JSON
({
id=1;
name="myName";
position="5";
})
这不是一个可分析JSON。我想问问有没有除了要角色而和纠正他们的任何方式,以这样的字符串转换成一个可分析JSON是这样的:
{
"id":1,
"name":"myName",
"position":"5"
}
我有一个字符串,我从一个Web服务,它看起来像这样得到:转换格式化字符串(不是有效的JSON),以JSON
({
id=1;
name="myName";
position="5";
})
这不是一个可分析JSON。我想问问有没有除了要角色而和纠正他们的任何方式,以这样的字符串转换成一个可分析JSON是这样的:
{
"id":1,
"name":"myName",
"position":"5"
}
我可以解析有效的jsons没有问题,问题是它不是一个有效的json – m0j1
你冷运行一堆正则表达式替换每一个变化。但是,你需要捕捉财产名称等。表现将是可怕的。
如果格式已知且可靠(例如集合/数组和子对象发生了什么)。而服务提供商不提供客户端或SDK。那么你最好的选择是编写你自己的解析器。从头开始创建自己并不难。或者你可以使用Irony.net或eto.parse这样的解析器库。这两个都可以让你在c#中构造一个语法,因此它完全自包含而不需要编译器编译器和生成的代码。还有一类解析器叫做“monadic”解析器,比如Sprache,它们更简单一些(一旦你将头部缠绕在它们周围)。
无论采用哪种方法,您最终都会识别每个属性和对象边界,您可以在其中执行所需操作:设置属性;创建一个JToken;不管...
然后,你可以把整个地段包装在MediaTypeFormatter
中,并通过HttpClient
致电服务并获取对象。
最后我不得不写我自己的函数将其转换为可解析JSON,这里是我写的函数:
public string convertToJson(string mJson)
{
mJson = mJson.Replace("(","[");
mJson = mJson.Replace(")","]");
string mJson2 = mJson.Trim('[',']');
string[] modules = mJson2.Split(',');
for(int i = 0;i<modules.Length;i++)
{
Debug.Log("module["+i+"]: " + modules[i]);
}
for(int m=0;m<modules.Length;m++)
{
char[] mCharacter = {'{','}'};
modules[m] = modules[m].Replace("{",string.Empty).Replace("}",string.Empty).Trim();
Debug.Log("module["+m+"] after trim: " + modules[m]);
string[] items = modules[m].TrimEnd(';').Split(';');
modules[m] = "{";
for(int j=0;j<items.Length;j++)
{
Debug.Log("item["+j+"]: " + items[j]);
string[] keyValue = items[j].Split('=');
Debug.Log("key,value: " + keyValue[0] + ", " + keyValue[1]);
modules[m] = modules[m] + "\"" + keyValue[0].Trim() + "\":" + keyValue[1].Trim() + ",";
}
modules[m] = modules[m].Substring(0,modules[m].Length-1) + "}";
Debug.Log("modules["+m+"] final: " + modules[m]);
}
string finalJson = "[";
for(int m=0;m<modules.Length;m++)
{
finalJson = finalJson + modules[m] + ",";
}
finalJson = finalJson.Substring(0,finalJson.Length-1) + "]";
Debug.Log("finalJson: " + finalJson);
return finalJson;
}
哦,这还没有一个有效的JSON? –
@AmitKumarGhosh不,它不是 – m0j1