0

我想确定将简单列表存储和检索到单个 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 中存储字符串列表的最佳方法,我将不胜感激。是否有更简单的方法来搜索和访问数组数据?

4

3 回答 3

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

于 2013-07-05T22:18:43.707 回答
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;
}

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

于 2013-07-05T22:16:20.047 回答
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
于 2013-07-05T23:01:19.197 回答