- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在用MySQL数据创建Json数组时遇到了好几天的问题
这是我的 MySQL 数据:
zi zn vn pioo pio ve station es eo
1 Zone 1 Value 01 1 199 0 1 1 0
1 Zone 1 Value 02 54 637 0 3 0 0
1 Zone 1 Value 03 55 637 1 3 0 0
2 Zone 2 Value 01 1 199 0 1 1 0
2 Zone 2 Value 03 55 637 1 3 0 0
2 Zone 2 Value 04 56 642 0 3 0 0
3 Zone 3 Value 01 1 199 0 1 1 0
3 Zone 3 Value 05 57 647 1 3 0 0
4 Zone 4 Value 05 57 647 1 3 0 0
5 Zone Test Value 02 54 637 0 3 0 0
5 Zone Test Value 03 55 637 1 3 0 0
这是我的 PHP 代码:
我的查询是 $query,我的 SQL 连接是 $con
$result = array();
$json_response = array();
$response = array();
if($stmt = $con->prepare($query)){
$stmt->execute();
$stmt->bind_result($zoneId,$zoneName,$vanneName,$piooId,$pioId,$vanne_etat,$station,$etat_station,$etat_ordre);
while($stmt->fetch()){
$json_response = [
'zi' => $zoneId,
'zn' => $zoneName,
$vanneName => [],
];
$json_response[$vanneName][] = [
'pioo' => $piooId,
'pio' => $pioId,
've' => $vanne_etat,
'es' => $etat_station,
'eo' => $etat_ordre,
];
$data = [];
foreach ($json_response as $element) {
$data[] = $element;
}
$result[]=$json_response;
}
$stmt->close();
$online = mysqli_fetch_array(mysqli_query($con, "SELECT CASE WHEN TIMESTAMP > DATE_SUB(NOW(), INTERVAL 5 MINUTE) THEN 1 ELSE 0 END AS online FROM relevés_instantanés ORDER BY ID DESC LIMIT 1")) ['online'];
$response["online"] = $online;
$response["success"] = 1;
$response["data"] = $result;
}else{
//Errors
$response["success"] = 0;
$response["message"] = mysqli_error($con);
}
mysqli_close($con);
echo json_encode($response);
像这样输出Json:
{
"online":"1",
"success":1,
"data":[
{
"zi":1,
"zn":"Zone 1",
"Value 01":[
{
"pioo":1,
"pio":199,
"ve":0,
"es":1,
"eo":0
}
]
},
{
"zi":1,
"zn":"Zone 1",
"Value 02":[
{
"pioo":54,
"pio":637,
"ve":0,
"es":0,
"eo":0
}
]
},
{
"zi":1,
"zn":"Zone 1",
"Value 03":[
{
"pioo":55,
"pio":637,
"ve":1,
"es":0,
"eo":0
}
]
},
{
"zi":2,
"zn":"Zone 2",
"Value 01":[
{
"pioo":1,
"pio":199,
"ve":0,
"es":1,
"eo":0
}
]
},
{
"zi":2,
"zn":"Zone 2",
"Value 03":[
{
"pioo":55,
"pio":637,
"ve":1,
"es":0,
"eo":0
}
]
},
{
"zi":2,
"zn":"Zone 2",
"Value 04":[
{
"pioo":56,
"pio":642,
"ve":0,
"es":0,
"eo":0
}
]
},
{
"zi":3,
"zn":"Zone 3",
"Value 01":[
{
"pioo":1,
"pio":199,
"ve":0,
"es":1,
"eo":0
}
]
},
{
"zi":3,
"zn":"Zone 3",
"Value 05":[
{
"pioo":57,
"pio":647,
"ve":1,
"es":0,
"eo":0
}
]
},
{
"zi":4,
"zn":"Zone 4",
"Value 05":[
{
"pioo":57,
"pio":642,
"ve":1,
"es":0,
"eo":0
}
]
},
{
"zi":5,
"zn":"Zone Test",
"Value 02":[
{
"pioo":54,
"pio":637,
"ve":0,
"es":0,
"eo":0
}
]
},
{
"zi":5,
"zn":"Zone Test",
"Value 03":[
{
"pioo":55,
"pio":637,
"ve":1,
"es":0,
"eo":0
}
]
}
]
}
但我期望这样的输出:(我不确定语法,但你可以理解我的愿望。)
{
"online":"1",
"success":1,
"data":[
{
"zi":1,
"zn":"Zone 1"{
"Value 01":[
{
"pioo":1,
"pio":199,
"ve":0,
"es":1,
"eo":0
}
]
"Value 02":[
{
"pioo":54,
"pio":637,
"ve":0,
"es":0,
"eo":0
}
]
"Value 03":[
{
"pioo":55,
"pio":637,
"ve":1,
"es":0,
"eo":0
}
]
},
{
"zi":2,
"zn":"Zone 2"{
"Value 01":[
{
"pioo":1,
"pio":199,
"ve":0,
"es":1,
"eo":0
}
]
"Value 03":[
{
"pioo":55,
"pio":637,
"ve":1,
"es":0,
"eo":0
}
]
"Value 04":[
{
"pioo":56,
"pio":642,
"ve":0,
"es":0,
"eo":0
}
]
},
{
"zi":3,
"zn":"Zone 3"{
"Value 01":[
{
"pioo":1,
"pio":199,
"ve":0,
"es":1,
"eo":0
}
]
"Value 05":[
{
"pioo":57,
"pio":647,
"ve":1,
"es":0,
"eo":0
}
]
},
{
"zi":4,
"zn":"Zone 4"{
"Value 05":[
{
"pioo":57,
"pio":642,
"ve":1,
"es":0,
"eo":0
}
]
},
{
"zi":5,
"zn":"Zone Test"{
"Value 02":[
{
"pioo":54,
"pio":637,
"ve":0,
"es":0,
"eo":0
}
]
"Value 03":[
{
"pioo":55,
"pio":637,
"ve":1,
"es":0,
"eo":0
}
]
}
]
}
我无法隔离区域的每个 id 来正确构建我的 JSON ....
是否可以在 while 循环中使用每个 ID 一次?
感谢任何帮助
抱歉我的英语不好..:S
乔尔
最佳答案
好吧,我就是这样做的。这是一种略有不同的结构,但更容易构建。
此外,我没有使用数据库,因此我将使用这个固定数组
$a = [
[
"zi" => "1",
"zn" => "Zone 1",
"vn" => "Value 01",
"pioo" => "1",
"pio" => "199",
"ve" => "0",
"station" => "1",
"es" => "1",
"eo" => "0"
], [
"zi" => "1",
"zn" => "Zone 1",
"vn" => "Value 02",
"pioo" => "54",
"pio" => "637",
"ve" => "0",
"station" => "3",
"es" => "0",
"eo" => "0"
],[
"zi" => "2",
"zn" => "Zone 2",
"vn" => "Value 04",
"pioo" => "56",
"pio" => "642",
"ve" => "0",
"station" => "3",
"es" => "0",
"eo" => "0"
]
];
只要数据位于每行 $data
中,您就可以将下面的 foreach
替换为数据库中的 while
循环,应该没问题。
$output = [
"online" => 0,
"success" => 0,
"data" => []
];
foreach($a as $data){
//replace foreach with while from the DB
//eg. while(false != ($data = $stmt->fetch_assoc())){
$zone = "zone_{$data['zi']}";
if(!isset($output['data'][$zone])){
//setup the zone first time we see it
$output['data'][$zone] = [
"zi" => $data['zi'],
"zn" => $data['zn'],
];
}
$value = $data['vn'];
if(!isset($output['data'][$zone][$value])) $output['data'][$zone][$value] = [];
//remove these we don't want them anymore
unset($data['zi'], $data['zn'], $data['vn']);
$output['data'][$zone][$value][] = $data;
}
$output["online"] = 1;
$output["success"] = 1;
您可以在线测试here
输出
{
"online": 1,
"success": 1,
"data": {
"zone_1": {
"zi": "1",
"zn": "Zone 1",
"Value 01": [
{
"pioo": "1",
"pio": "199",
"ve": "0",
"station": "1",
"es": "1",
"eo": "0"
}
],
"Value 02": [
{
"pioo": "54",
"pio": "637",
"ve": "0",
"station": "3",
"es": "0",
"eo": "0"
}
]
},
"zone_2": {
"zi": "2",
"zn": "Zone 2",
"Value 04": [
{
"pioo": "56",
"pio": "642",
"ve": "0",
"station": "3",
"es": "0",
"eo": "0"
}
]
}
}
}
正如你所看到的,它非常接近你想要的格式,但是通过添加这个 $zone = "zone_{$data['zi']}";
我们可以跟踪事情整个群都更好了。
//php
$output['data'][$zone];
//json
"data": {
"zone_1"
否则我们必须首先按区域对它们进行分组,然后在第二个循环中我们可以将它们写出来。正如您所说,我无法隔离区域的每个 id 来正确构建 JSON 解决该问题的方法是将数据输出到按区域 id 分组的数组,然后循环遍历。因此,我们必须构建上面的第 1 阶段,然后一旦它们正确分组,就基本上删除 zone
键。
正如我在评论中提到的,您想要的格式在这一切结束时有一个错误。就在这里
"zn":"Zone 1"{ //<--- this bracket
"Value 01":[
{
...
所以我不知道这是否只是一个错字,或者是否应该以某种方式成为结构的一部分(我只是忽略了它)。
我刚刚想到一个简单的方法来删除我添加的 $zone
键。您可以简单地使用 array_values 来删除该键。因此,像下面这样,在将其编码为 JSON 之前添加该行。
$output['data'] = array_values($output['data']);
这会将结构更改为
{
"online": 1,
"success": 1,
"data": [
{
"zi": "1",
"zn": "Zone 1",
"Value 01": [
{
"pioo": "1",
"pio": "199",
"ve": "0",
"station": "1",
"es": "1",
"eo": "0"
}
],
"Value 02": [
{
"pioo": "54",
"pio": "637",
"ve": "0",
"station": "3",
"es": "0",
"eo": "0"
}
]
}
]
}
你可以在网上看到 here 但是因为我们事先支持了结构,所以我们获得了通过键($zon var)识别它们的优势
关于php - 如何在 while 循环中对 ID 进行分组(对于 php json_encode),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581335/
我正在尝试使用 twig json_encode 函数,但是当我这样做时 var packageDetails = {{(packageDetails|json_encode)}}; pac
我正在尝试使用 twig json_encode 函数,但是当我这样做时 var packageDetails = {{(packageDetails|json_encode)}}; 而pa
不要重新发明轮子,我指的是已经存在的 Cyrillic characters in PHP's json_encode . 问题是:这些字符是什么,它们是什么意思:\u0435、\u0434 等等?我
这是我目前的脚本: //... PDO CONNECTION AND QUERY //...* $result = $dbh->query($sql)->fetchAll(PDO::FETCH_A
我正在使用 PHP 5.2.x 并希望仅使用私有(private)成员对自定义 PHP 类的对象进行编码。其中一个私有(private)成员是另一个自定义类的对象数组。 我尝试了 https://st
$emailFields = array( array( 'name' => 'comments', 'type' => 'html', 'c
我将一些数据放入我的 mysql 数据库中,它运行良好。但是当我使用 json_encode 获取数据时,我会像这样返回: {"idpostdata":"49","artID":null,"times
我目前正在从mysql表中获取值。这些值是从foreach循环中获取的。然后,在完成循环之后,将数组转换为json对象。但是我在获取json格式以便与其他api结合使用方面遇到困难。我的循环仅在有两个
我有一些与 json_encode 相关的问题:我需要使用一个大数组(几个 100k 项),每个都有非常简单的结构(一个键,一个字符串值)。 json_decode 工作正常,但只要我想对它进行 js
我想出了如何获得我想要的结果(几乎)。我的代码在最后一个 ] 之前添加了一个逗号,所以它不会完全起作用。我知道我可以使用 Json_encode 从我的外部 json 构建我的数组,但我很难过。我要么
我有一个数组,其中包含一些字符串值和一些数值。我用过 json_encode 将数组转换为 json 数组,但它将数字值转换为我不想要的字符串。 [["India","2"],["Panama","
我在 PHP 中有以下示例代码: $data = array( 'hello', 'world', 'hi' ); $ret = array(); $ret['test'] = array();
我正在使用 json_encode 从数组创建一个 JSON 对象。它们的数组有几百个元素长,但 json_encode 似乎只返回数组的第一个元素。 这是 json_decode 的限制,还是我使用
所以这是我的 php 这给了我一个像这样的 JSON [{"name":"Flipkart"},{"name":"jagdish"},{"name":"mm"},{"name":"mouse"},{
看来 json_encode 对我的 PHP 文件中可以包含哪些其他内容非常挑剔。这很好,因为我只是在文件 A(使用 json_encode)自己的文件中执行我通常会执行的操作。 我只是想我会问,因为
我使用这个简单的代码将数据库查询结果转换为 JSON 格式: $result = $mysqli->query(" SELECT date as a , su
我有一个 PHP 代码,需要将数据库表数据编码为 json。所以我使用了 json_encode()。 我使用此处给出的表格 - http://www.geekality.net/2011/08/21
Warning: json_encode(): recursion detected in [Directory] 这个错误是什么,我似乎无法解决这个问题。它针对每个遇到的错误 500 生成一个 B
再次遇到障碍..我需要从 json 文件中编码一系列值,该范围之外的所有内容都将为空。关于如何实现这一目标有什么建议吗? 例如:如果 json 值 >100,则将值返回到新数组中,如果 json 值
我正在创建一个简单的上传脚本。我使用一个简单的表单让人们上传图片,然后外部 php 脚本将上传图片并将一些变量返回到上传页面。 但我无法让部分变量返回工作。目前我正在使用这个: 还包含表单的页面: f
我是一名优秀的程序员,十分优秀!