【问题标题】:How to access Dictionary<string, string> returned as JSON in JQuery?如何在 JQuery 中访问以 JSON 形式返回的 Dictionary<string, string>?
【发布时间】:2020-06-09 11:25:54
【问题描述】:

我有一个控制器方法,它将字典返回到 JQuery ajax 函数:

public JsonResult GenerateLicensePlateSeries(string letters, int number, int amount)
{
    Dictionary<string, string> plates = new Dictionary<string, string>();

    var table = luxWebSamContext.LicensePlates;

    do
    {
        if (table.Where(x => x.LicensePlateNumber == (letters + number)).Count() == 0)
        {       
            plates.Add(letters + (number), "");
        }
        else
        {           
            plates.Add(letters + (number), table.Where(x => x.LicensePlateNumber == (letters + number)).Single().CommissionNumber);
        }

        number++;
    }
    while (plates.Count < amount);

    return Json(plates);
}

该代码返回以下字符串:

{"AB2495":"","AB2496":"","AB2497":"","AB2498":"","AB2499":"","AB2500":"095753125"}

我的问题是我不知道如何在我的 post 方法的成功功能中访问这些数据。我想遍历响应并检查每个键/对值的第二个字段是否填充了一个数字(最后一个是):

$.post(baseUrl + '/de/SAM/GenerateLicensePlateSeries',
            {
                letters: $("#seriesLetters").val(),
                number: $("#seriesNumbers").val(),
                amount: $("#seriesAmount").val()
            },            
            function (returnedData) {

                var data = JSON.parse(returnedData);
                alert(data);
            });

我尝试将其解析为 JSON,但收到错误消息:

未捕获的 SyntaxError:位置 1 处 JSON 中的意外标记 o

任何想法如何访问数据?

当我将它打印到控制台时,它看起来像这样:

【问题讨论】:

  • 您是否尝试在没有 JSON.parse 的情况下打印数据?例如只是 console.log(returnedData); ?
  • 请注意,queryable.Where(lambda).Count() == 0 在写成!queryable.Any(lambda) 时几乎总是会执行得更快。
  • 错误原因是你在returnedData上运行JSON.parse,这不是JSON,而是一个已经从JSON解析出来的对象。

标签: javascript c# asp.net-core


【解决方案1】:

我想出了以下解决方法。我将数据类型从 Dictionary 更改为匿名类型列表:

public JsonResult GenerateLicensePlateSeries(string letters, int number, int amount)
        {
            List<Object> plates = new List<Object>();            

            var table = luxWebSamContext.LicensePlates;            
            do
            {
                if (table.Where(x => x.LicensePlateNumber == (letters + number)).Count() == 0)
                {                    
                    var v = new 
                    { 
                        plate = letters + (number), 
                        assignedTo = "" 
                    };

                    plates.Add(v);
                }
                else
                {                 
                    var v = new 
                    { 
                        plate = letters + (number), 
                        assignedTo = table.Where(x => x.LicensePlateNumber == (letters + number)).Single().CommissionNumber
                    };
                    plates.Add(v);
            }

                number++;

            }
            while (plates.Count < amount);

            return Json(plates);
        }

现在我的回复是这样的:

我可以访问它:在 ajax 方法中:

success: function (returnedData) {                       



                for (var i = 0; i < returnedData.length; i++) {
                    alert(returnedData[i].plate);
                    alert(returnedData[i].assignedTo);
                }

            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多