【问题标题】:Data column(s) for axis #0 cannot be of type string error in google chart轴 #0 的数据列不能是谷歌图表中的字符串类型错误
【发布时间】:2012-02-08 14:16:26
【问题描述】:

我尝试使用 PHP 在服务器端填充谷歌图表数据表。我得到了正确的 JSON 文件,但图表没有显示在客户端应用程序中。我收到错误-轴 #0 的数据列不能属于字符串类型。我的代码在下面。

从数据库中取出数据后,

$colarray=array(array("id"=>"","label"=>"userid","pattern"=>"","type"=>"number"),array("id"=>"","label"=>"name","pattern"=>"","type"=>"string"));

  $final=array();
    for($i=0;$i<$rows;$i++) 
    {
     $id[$i]=pg_fetch_result($res1,$i,'id');
     $name[$i]=pg_fetch_result($res1,$i,'name');
     $prefinal[$i]=array("c"=>array(array("v"=>$name[$i]),array("v"=>$name[$i])));
     array_push($final,$prefinal[$i]);
    }


    $table['cols']=$colarray;
    $table['rows']=$final;
    echo json_encode($table);

我的输出 Json:

{
  "cols":[
    {"id":"","label":"userid","pattern":"","type":"number"},
    {"id":"","label":"name","pattern":"","type":"string"}
   ],
  "rows":[
    {"c":[{"v":"101"},{"v":"Aircel"}]},
    {"c":[{"v":"102"},{"v":"Srini"}]},
    {"c":[{"v":"103"},{"v":"Tamil"}]},
    {"c":[{"v":"104"},{"v":"Thiyagu"}]},
    {"c":[{"v":"105"},{"v":"Vasan"}]},
    {"c":[{"v":"107"},{"v":"Senthil"}]},
    {"c":[{"v":"108"},{"v":"Sri"}]},
    {"c":[{"v":"109"},{"v":"Docomo"}]},
    {"c":[{"v":"106"},{"v":"Innodea"}]}
    ]
}

如何解决这个问题?

【问题讨论】:

    标签: json google-visualization


    【解决方案1】:

    要扩展@sajal 的准确答案:更改代码的最后一行:

    echo json_encode($table);
    

    到:

    echo json_encode($table, JSON_NUMERIC_CHECK);
    

    这将告诉 json_encode 识别数字并避免将它们用引号括起来(自 PHP 5.3.3 起可用。)。 http://php.net/manual/en/json.constants.php#constant.json-numeric-check

    【讨论】:

    • 迄今为止最好的解决方案。
    • 让我解释一下答案,以便人们可以帮助它,如果没有 JSON_NUMERIC_CHECK,从控制器传递到视图的数据看起来像:[“23”,“362”] 4: (2) ["24", "413"] 5: (2) ["25", "398"] 6: (2) ["26", "516"] 当它执行的检查变成这样: 21, 119] 2: (2) [22, 4] 3: (2) [23, 362] 4: (2) [24, 413] 5: (2) [25, 398],所以这意味着它将字符串数组转换为数字数组。
    【解决方案2】:

    您将用户标识的类型指定为数字...但传递字符串..这会导致问题。

    我只是在相反的问题上浪费了 30 分钟...

    您的输出 json 应如下所示:-

    {
      "cols":[
        {"id":"","label":"userid","pattern":"","type":"number"},
        {"id":"","label":"name","pattern":"","type":"string"}
       ],
      "rows":[
        {"c":[{"v":101},{"v":"Aircel"}]},
        {"c":[{"v":102},{"v":"Srini"}]},
        {"c":[{"v":103},{"v":"Tamil"}]},
        {"c":[{"v":104},{"v":"Thiyagu"}]},
        {"c":[{"v":105},{"v":"Vasan"}]},
        {"c":[{"v":107},{"v":"Senthil"}]},
        {"c":[{"v":108},{"v":"Sri"}]},
        {"c":[{"v":109},{"v":"Docomo"}]},
        {"c":[{"v":106},{"v":"Innodea"}]}
        ]
    }
    

    【讨论】:

      【解决方案3】:

      在条形图上,其中一列(第二列)必须是数字。这可能会导致此错误消息。

      【讨论】:

        【解决方案4】:

        在您的 drawChart() 函数中,您可能正在使用 google.visualization.arrayToDataTable,这不允许任何空值。请明确使用 addColumn 函数

        【讨论】:

          【解决方案5】:

          如果数据格式应该是这样的:

          data: [
              ["string", "string"], //first Column
              ["string1", number],
              ["string2", number],
              ["string3", number],
          ]
          

          那么你可以克服这个错误。

          【讨论】:

            【解决方案6】:

            当您从控制器传递数据时,您需要这样做:举个例子,我有控制器,我通过分组通过它发送数据。

            控制器: \DB::statement("SET SQL_MODE=''");//这是在查询之前使用它的技巧

            $Rspatients = DB::table('reports')
            ->select(
                DB::raw("day(created_at) as day"),
                DB::raw("Count(*) as total_patients"))
            
            ->orderBy("created_at")
            ->groupBy(DB::raw("day(created_at)"))
            ->get();
            
            
            $result_patients[] = ['day','Patients'];
            foreach ($Rspatients as $key => $value) {
            $result_patients[++$key] = [$value->day,$value->total_patients];
            }
            
                return view('Dashboard.index')
              ->with('result_patients',json_encode($result_patients,JSON_NUMERIC_CHECK));
            

            如果没有JSON_NUMERIC_CHECK,则数据将是字符串数组,如果有json check,则数据将转换为数字数组。

            JSON 检查数据之前:

            4: (2) ["24", "413"]
            5: (2) ["25", "398"]
            

            经过JSON校验数据:

            4: (2) [24, 413]
            5: (2) [25, 398]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-04-20
              • 2022-01-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-21
              相关资源
              最近更新 更多