从JSON数组访问字符串值

时间:2016-01-14 18:16:49

标签: javascript json asp.net-mvc dictionary

我正在使用ASP.NET MVC创建JSON键/值字符串和Javascript来访问它。我已经尝试了一些例子(见下文),但其中只有一个似乎有用,我在其中硬编码元素的id(显然不是我想要的)。其他所有内容都会抛出未定义或异常。为了澄清,我只是试图从给定密钥的JSON字符串中获取值(短语)。

我的代码如下。

    public string GetNcpJsonDictionary()
    {
        // Get a list of all dictionary items.
        var db = Database.GetDatabase(EnvironmentHelper.IsProduction ? "pub" : "web");
        var ncpDictionaryFolder = db.GetItem(ItemIdMapper.Instance.DictionaryNcpItemId);
        var ncpDictionaryItems = ncpDictionaryFolder.Axes.GetDescendants().ToList();
        var condensedDictionaryItemList = new List<DictionaryItem>();

        foreach (var dictionaryItem in ncpDictionaryItems)
        {
            condensedDictionaryItemList.Add(new DictionaryItem
            {
                Key = SitecoreApiHelper.GetFieldValue(dictionaryItem.ID.ToString(), "Key"),
                Phrase = SitecoreApiHelper.GetFieldValue(dictionaryItem.ID.ToString(), "Phrase")
            });
        }
        var result = JsonConvert.SerializeObject(condensedDictionaryItemList);
        return result;
    }

在我看来,我说:

<script>
    window.ncpDictionary = @Html.Action("GetNcpJsonDictionary", "NCP");
</script>

使用Javascript:

var dict = window.ncpDictionary;
if (dict != null) {
    $("label[for='AccountBaseModel_Person_Address']").append(dict['we-cannot-deliver-to-po-boxes']);
}

JSON输出如下: [{"Key":"some-key","Phrase":"some phrase"},...,...]

调试JS给我看了..

enter image description here

但是dict['we-cannot-deliver-to-po-boxes']返回undefined。

我也试过了:

dict.we-cannot-deliver-to-po-boxes

dict.getString('we-cannot-deliver-to-po-boxes')

这样可行(但显然不能使用):

dict[63]['Phrase']

可能有一个简单的解决方法,但我还没找到。

2 个答案:

答案 0 :(得分:1)

要创建合适的字典,请使用tbl.1 <- data.table("A" = runif(5), "B" = runif(5)) tbl.2 <- data.table("A" = runif(5), "B" = runif(5)) tbl.3 <- data.table("A" = runif(5), "B" = runif(5)) x <- ls(pattern = "tbl") for (i in seq_along(x)) { assign(x[i], get(x[i])[1, ]) }

Dictionary<TKey, TValue>序列化为数组,即使列表中的项目是“类似字典”。

当您稍后尝试从客户端JavaScript访问值时,您当前使用通常用于数组的括号表示法:

List<T>

也可以使用对象,但使用带有效键名称的点符号更为常见:

dict['we-cannot-deliver-to-po-boxes']

答案 1 :(得分:0)

  

但dict ['we-can-deliver-to-po-boxes']返回undefined。

因为'we-cannot-deliver-to-po-boxes'是属性值,而不是属性名称

  

这样可行(但显然不能使用):

     

字典[63] [ '短语']

为什么不呢? dict显然是一个数组,每个索引都有一个keyphrase属性的对象。

如果您需要在phrase数组中搜索特定dict值,则需要迭代dict并找到具有特定键的短语

function findKeyPhrase( someKeyName )
{
    var value = "";
    dict.forEach( function(element){
       if ( element.key == someKeyName )
       {
         value = element.phrase;
       }
    });
    console.log( value );
    return value;
}
console.log( findKeyPhrase ( "we-cannot-deliver-to-po-boxes" ) );