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