使用Javascript访问JSON元素

使用Javascript访问JSON元素,javascript,json,getjson,Javascript,Json,Getjson,我有一个简单的JSON对象: [{"k":51.39920565355378,"B":0.087890625}] console.log(jsonData) //[{"k":51.39920565355378,"B":0.087890625}] function getMarkersByTripId($tripId) { if ($bdd = mysqli_connect(_BDD_HOST_, _BDD_USERNAME_, _BDD_PASSWORD_, _BDD_NAM

我有一个简单的JSON对象:

 [{"k":51.39920565355378,"B":0.087890625}]
 console.log(jsonData) //[{"k":51.39920565355378,"B":0.087890625}]
 function getMarkersByTripId($tripId)
 {
    if ($bdd = mysqli_connect(_BDD_HOST_, _BDD_USERNAME_, _BDD_PASSWORD_, _BDD_NAME_)) {

    $sql = 'SELECT DISTINCT `markers` FROM `trip` WHERE `trip_id` = "'.$tripId.'"';
    $req = mysqli_query($bdd, $sql);

    if ($req) {
        $row = mysqli_fetch_row($req);
        echo json_encode($row[0]);
    }
    else {
        echo json_encode(array('status' => 'failure'));
    }
  }

    if ($bdd) {
    mysqli_close($bdd);
  }
}
我想用Javascript访问k和B,下面是我的代码:

 var jsonData = JSON.parse(jsonText);
 console.log(jsonData.k); //Undefined
无论我尝试过什么,它总是返回未定义的结果,但当我显示jsonData时,我可以看到JSON对象的所有描述:

 [{"k":51.39920565355378,"B":0.087890625}]
 console.log(jsonData) //[{"k":51.39920565355378,"B":0.087890625}]
 function getMarkersByTripId($tripId)
 {
    if ($bdd = mysqli_connect(_BDD_HOST_, _BDD_USERNAME_, _BDD_PASSWORD_, _BDD_NAME_)) {

    $sql = 'SELECT DISTINCT `markers` FROM `trip` WHERE `trip_id` = "'.$tripId.'"';
    $req = mysqli_query($bdd, $sql);

    if ($req) {
        $row = mysqli_fetch_row($req);
        echo json_encode($row[0]);
    }
    else {
        echo json_encode(array('status' => 'failure'));
    }
  }

    if ($bdd) {
    mysqli_close($bdd);
  }
}
以下是检索我的JSON对象的服务器代码:

 [{"k":51.39920565355378,"B":0.087890625}]
 console.log(jsonData) //[{"k":51.39920565355378,"B":0.087890625}]
 function getMarkersByTripId($tripId)
 {
    if ($bdd = mysqli_connect(_BDD_HOST_, _BDD_USERNAME_, _BDD_PASSWORD_, _BDD_NAME_)) {

    $sql = 'SELECT DISTINCT `markers` FROM `trip` WHERE `trip_id` = "'.$tripId.'"';
    $req = mysqli_query($bdd, $sql);

    if ($req) {
        $row = mysqli_fetch_row($req);
        echo json_encode($row[0]);
    }
    else {
        echo json_encode(array('status' => 'failure'));
    }
  }

    if ($bdd) {
    mysqli_close($bdd);
  }
}
函数witch将我的JSON对象添加到数据库中:

 function actionSaveNewtrip($title, $status, $markers)
 {
    if ($bdd = mysqli_connect(_BDD_HOST_, _BDD_USERNAME_, _BDD_PASSWORD_, _BDD_NAME_)) {
        $markers = mysqli_real_escape_string($bdd, $markers);
        $sql = 'INSERT INTO `trip` (title, status, markers) VALUES("'.$title.'",  "'.$status.'", "'.$markers.'")';
        $req = mysqli_query($bdd, $sql);

      if ($req) {
        echo json_encode(array('status' => 'success'));
      }
       else {
          echo json_encode(array('status' => 'failure'));
      }
  }

  if ($bdd) {
    mysqli_close($bdd);
 }
}
$markers是我插入到数据库中的JSON对象


我想知道像数组一样访问k和B有什么不对,谢谢。

您的JSON将解析为一个包含一个对象的数组。试一试

console.log(jsonData[0].k);

外部的
[]
使其成为一个数组。

因为它被包装在一个数组中,所以您需要访问第一个数组元素

jsonData[0].k
您可以在以下代码段中看到它的工作原理:

var jsonData=JSON.parse('[{“k”:51.399205653578,“B”:0.087890625}');

警报(jsonData[0].k)
仍然未定义,我尝试过。在您的浏览器控制台中尝试:
JSON.parse(“[{“k”:51.3992056535378,“B”:0.087890625}])[0].k
-它肯定有效。是的,如果我硬编码JSON描述,但不使用我从MySQL数据库获取的JSON对象,它就有效。当我使用console.log(jsonData)时,我有:[“[{”k:47.635783590864854,“B”:2.8125}]”可能我的JSON格式不正确,但我还不知道如何修复它?仍然被这个错误困扰。在浏览器控制台中试试这个:
JSON.parse(“[{”k:51.39920565355355378,“B”:0.087890625}”)[0]。k
-它确实有效。@Katcha我无法重现你的问题。我在答案中插入了一段代码片段,效果很好。当jsonData=[“[{“k”:47.635783590864854,“B”:2.8125}]”时不起作用。这与您发布的内容完全不同。如果你不能准确地描述你的问题,你就不能期望人们提供准确的帮助@我同意你的观点,很抱歉。@Katcha好吧,不管怎样。处理JSON响应可能会令人困惑,因为浏览器
console.log()
code打印对象的方式可能是“不诚实的”。您在注释中添加的内容似乎使您的服务器返回一个JSON编码的数组,该数组包含一个JSON编码的字符串;也就是说,由于某种原因,存在双重编码。如果您可以访问创建响应的服务器代码并可以发布响应,这可能有助于确定发生了什么。