【问题标题】:Use C# to create a windows service to parse JSON data and insert it into SQL table使用C#创建windows服务解析JSON数据并插入SQL表
【发布时间】:2015-08-24 19:14:42
【问题描述】:

我是JSON 的菜鸟。在我的研究中,我可以看到使用 JSON 与其他 api 方法相比的价值,但我遇到了一个独特的情境问题。

但是,我的问题在于尝试解析 JSON 数据。我在C# 中尝试了三种不同的方法来通过 URL 解析数据并不断收到各种错误。我相信我最近的方法会得到我正在寻找的东西,但是现在当我尝试执行代码时遇到了一个一般错误。

static void Main(string[] args)
{
    ExecuteRiskSearch();
    Console.ReadLine();
}

static void ExecuteRiskSearch()
{
    string url = "https://localhost/api/getWatchList/EDD9-5FFA-2A6A-3CB9ZCC";

    JObject results = JObject.Parse(url);

    foreach (var result in results["results"])
    {
        string cid = (string)results["CID"];
        JToken rank = results["rank"];

        string risk = "";
        if (rank is JValue)
        {
            risk = (string)rank;
        }
        else if (rank is JArray)
        {
            risk = (string)((JArray)rank).First;
        }

        Console.WriteLine("CID: {0}, Rank:{1}", cid, risk);
    }
}

错误发生在JObject results = JObject.Parse(url);

Newtonsoft.Json.dll 中出现“Newtonsoft.Json.JsonReaderException”类型的未处理异常 附加信息:解析值时遇到意外字符:h。路径'',第 0 行,第 0 位置。

您能否说明为什么会发生这种情况?我是否基于此?

【问题讨论】:

  • 所以您希望我们在不了解您的 json 的情况下调试您的代码?顺便说一句:JObject.Parse 需要一个有效的 json 字符串,而不是 URL。
  • 我认为您的意思是 REST 而不是 JSON。
  • 我无法添加我的 json 它是敏感数据。但是,json 是非常基本的两个字段“CID”和“rank”。

标签: c# json parsing json.net


【解决方案1】:

JObject.Parse(string json) 不以 url 作为参数。您需要下载字符串然后解析:

string url = "https://localhost/api/getWatchList/EDD9-5FFA-2A6A-3CB9ZCC";
string json = new WebClient().DownloadString(url);
JObject results = JObject.Parse(json);

【讨论】:

  • 谢谢你的工作。但是,现在我在 foreach 语句中有一个错误,上面写着“对象引用未设置为对象的实例”。它似乎是一个空引用异常。我试图添加空引用 IEnumerable 来处理空请求,但是代码只是以 0 退出。
  • 我猜这将是由你的 json 引起的。这只是意味着在您的 json 的根元素上找不到密钥 results。仔细检查你是否正确。如果您需要更多帮助,请在此处附上您的 json 内容,或者至少附上第一行。如果太长,请使用 pastebin.com。
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多