用于删除转义字符的JSON数据格式



解析某些JSON数据时遇到了一些问题,并删除了转义字符,这样我就可以将值分配给List。我在SO上读了很多关于这件事的文章,人们正在取得成功,我现在就在那里。我想知道是否有人能仔细检查我的方法,看看我做错了什么?

我从中获取JSON数据的API来自IPStack。它允许我从网站访问者那里获取基于位置的数据。

以下是我如何构建API路径。我添加到URI中的两个查询字符串是APIStack提供给您使用的访问键,还有fields=main,它提供了基于位置的主要数据(它们还有一些其他数据块,您也可以获得(。

string api_URI = "http://api.ipstack.com/";
string api_IP = "100.121.126.33";
string api_KEY = "8378273uy12938";
string api_PATH = string.Format("{0}{1}?access_key={2}&fields=main", api_URI, api_IP, api_KEY);

我的方法中用于提取JSON数据的其余代码如下所示。

System.Net.WebClient wc = new System.Net.WebClient();
Uri myUri = new Uri(api_PATH, UriKind.Absolute);
var jsonResponse = wc.DownloadString(myUri);
dynamic Data = Json.Decode(jsonResponse);

这给了我一个JSON字符串,看起来像这样。(我在每个键/值上都输入了,以便更好地显示格式(。IP和KEY我已经从自己的细节中混淆了,但无论如何,在这个摘要中都无关紧要。

"{
"ip":"100.121.126.33",
"type":"ipv4",
"continent_code":"OC",
"continent_name":"Oceania",
"country_code":"AU",
"country_name":"Australia"
}"

这就是我认为问题所在,因为我无法删除逃脱的角色。我尝试过使用Regex.Eescape(jsonResponse.ToString(((;虽然这不会引发任何错误,但实际上也不会删除\字符。它给我留下了与它完全相同的字符串。

我的其余方法是创建一个List,它有一个公共字符串(country_name(,只是为了在测试期间限制范围。

List<IPLookup> List = new List<IPLookup>();
foreach (var x in Data)
{
List.Add(new IPLookup()
{
country_name = x.country_name
});
}

Visual Studio中的实际错误是在它试图将country_name添加到列表中时抛出的,因为它抱怨它不包含country_name,我推测是因为它仍然带有反斜杠?

有什么帮助或建议我可以在哪里解决这个问题吗?

仅从Jon和Luke提出的问题中解决,这让我从另一个角度看待问题。

我没有在foreach语句中完成我的方法,也没有尝试通过x.something、、进行赋值,而是简单地用以下代码替换了该代码块。

List<IPLookup> List = new List<IPLookup>();
List.Add(new IPLookup()
{
country_name = Data.country_name, 
});

我现在可以访问这个JSON数据中的键/值对,而不必尝试删除调试器显示给我的转义字符。。。

最新更新