Javascript 从SQL结果创建嵌套JSON对象
我试图弄清楚如何创建嵌套的JSON对象,如下所示:Javascript 从SQL结果创建嵌套JSON对象,javascript,php,mysql,sql,json,Javascript,Php,Mysql,Sql,Json,我试图弄清楚如何创建嵌套的JSON对象,如下所示: company: "Company 1", pricing: { term: "1 year", price: "$4.95", term: "2 years", price: "3.95" }, 我在MySQL中有两个表,一个叫做plans,它是以这种方式构造的 | id | company | ------------------ | 2 | company 1 | 另一个表Plan_pricin
company: "Company 1",
pricing: {
term: "1 year",
price: "$4.95",
term: "2 years",
price: "3.95"
},
我在MySQL中有两个表,一个叫做plans,它是以这种方式构造的
| id | company |
------------------
| 2 | company 1 |
另一个表Plan_pricing表示定价数据
| id | plans_id | term | price |
--------------------------------
| 1 | 2 | 1 year | $4.95 |
| 2 | 2 | 2 years| $3.95 |
我使用Laravel4查询数据库并创建json以发送回ajax请求。这是当前正在发送服务器500错误的查询
public function results()
{
$answers = $_POST['answers'];
$data = DB::table('plans')
->join('plans_pricing', 'plans.id', '=', 'plans_pricing.plans_id')
->select('plans.company', 'plans_pricing.price', 'plans_pricing.term')
->whereIn('plans.id', $answers)
->get();
echo json_encode($data);
}
我不确定为什么这个查询不起作用,但这甚至不是我问这个问题的原因。我需要知道如何获取嵌套的JSON对象,当我创建连接时,我相信我将为每个对象接收一个单独的对象,如下所示:
| company | price | term |
------------------------------------
| company 1 | 4.95 | 1 year |
| company 1 | 3.95 | 2 years|
如何使这个SQL查询返回一个嵌套的JSON对象,就像我上面描述的那样?我已经被这个问题困扰了两天了,我真的需要一些指导。谢谢
更新:
通过将
echo json_encode
更改为return Response::json($data),服务器500错误得以修复代码>我从未使用过Laravel,但我认为这应该可以:
json_编码结果:
[{
"company":"company 1",
"rates":[{
"price":4.95,"term":"1 year"
},{
"price":3.95,"term":"2 years"
}]
}]
$answers的值是多少?通常是一个ID数组,如2、3、4。但是为了简单起见,只要假设$answers=2
,company1
的id
已经验证了您的查询是否正确执行,比如检查它是否出错,或者$data
实际上包含行,除了我控制台记录ajax请求时服务器500出错之外,我没有收到任何错误。在我添加joinIf之前,这个查询一直工作得很好,如果您使用的是laravel而不是echo json_encode,请使用return Response::json($data);另外,如果您使用的是chrome open开发者工具,那么当您发出ajax请求时,它会出现什么错误?我认为自己在PHP方面相当流利,但我对解决方案的几个部分感到困惑。为什么要声明$output[]=array()代码>foreach循环的内部和外部?为什么要使用end($output)
而我最困惑的一行是$currentItem=&$output[key($output)]代码>这条线在做什么?再次感谢您的回答,它工作得很好,我只是对它的工作方式感到困惑,我将整个变量$output声明为一个数组(第1行)。在循环内部,如果公司是新公司,我在$output中创建一个新元素,并将其设置为空数组。然后我创建了一个对新数组元素的引用——这就是以“get a reference to the new added array element”为前缀的两行所做的。还有其他方法可以在不使用参考资料的情况下获得相同的结果。很有趣,感谢您的解释。我真的很感激it@James这个条件语句:如果($datum->company!=$currentCompany)
意味着相同的$datum->company值不会在其他值之后再次出现吗?@JeaffreyGilbert更正。其想法是为每个公司创建一个数组元素,并将其他$data值添加到现有元素中(对于任何给定的公司)。为此,必须按公司对输入列表($data)进行排序,以便将同一公司的所有记录放在一起。
[{
"company":"company 1",
"rates":[{
"price":4.95,"term":"1 year"
},{
"price":3.95,"term":"2 years"
}]
}]