在单个JSON密钥中存储和检索字符串列表的最佳实践?

时间:2013-07-05 22:10:51

标签: javascript arrays json

我想确定将简单列表存储和检索到单个JSON密钥的最佳实践。

假设我有5个朋友:

bob, joe, peter, susan, & tiffany

假设我有一个更大的JSON集合,如下所示:

{
    "title":"my title",
    "description":"my description about this collection"
}

现在,如果我想在关键字“朋友”下将这个朋友列表添加到我的收藏中,我可能会像这样构建它:

{
    "title":"my title",
    "description":"my description about this collection"
    "friends":[
        "bob",
        "joe",
        "peter",
        "susan",
        "tiffany"
    ]
}

我遇到的最大挑战之一就是你不能使用一些内置的javascript或php数组函数。

另一方面,在密钥:值配对数组中存储未知数量的对象同样无法管理。

如果有人能够解释在JSON中存储字符串列表的最佳方法,我将感激不尽。有没有更简单的方法来搜索和访问数组数据?

3 个答案:

答案 0 :(得分:1)

以下内容应该能够很好地运作:

function checkIfFriends(json, friend) {
    return json.friends.indexOf(friend) !== -1;
}

您可以轻松实现其他搜索功能:

function findFriendsOf(people, friend) {
    var found = [];
    for(var i = 0; i < people.length; i++) {
        if(people[i].indexOf(friend) !== -1) {
            found.push(people[i]);
        }
    }
    return found;
}

通常,存储单一对象列表的最佳方法是作为数组。这是人们普遍期望它被存储的东西,并且当他们必须维护它时会使其他人的生活更轻松。

答案 1 :(得分:1)

以最常规格式存储它,除非有充分的理由不这样做。在这种情况下,我认为数组/列表是最合适的。这是一个同名的名字集合。

语言支持 - 学习它。请记住,JSON只是 文本,但是在JavaScript(或PHP)对象中,应该有适当的集合搜索:

var ar = ["a", "b", "c"]
var i = ar.indexOf("b")  // -> 1
var b = ar[i]  
alert(b)                 // -> "b"

请注意,Array.indexOf是在ECMAScript第5版中引入的。我建议对旧浏览器使用shim

答案 2 :(得分:0)

虽然它不是最佳的,但您可以将元素存储在字符串中并使用正则表达式,如:

var src='joe,fred,bob,zebulon';

function hasMember(src,name){
    var RE=new RegExp('(?:^|,)'+name+'(?:,|$)');
    return RE.test(src);
}

src.split(',').forEach(function(name){
   console.log(name+':'+hasMember(src,name));
});

打印:

joe:true
fred:true
bob:true
zebulon:true

和console.log('rob:'+ hasMember(src,'rob'))打印:

rob:false