2016-08-02 2 views
0

내가이숫자 문자열

$.getJSON('returngps.php').done(function(data) { 
    for (var i=0;i< data.length;i++){ 
    console.log(data[i]); 
    } 
    } 

내 문제와이 데이터를 얻기 위해 자바 스크립트를 사용하고 다음과 같은 PHP 코드

$result = mysql_query("select lat,lng from gpsdata limit 10"); 
$rows = array(); 
while($r = mysql_fetch_assoc($result)) { 
    $rows[] = $r; 
} 

print json_encode($rows); 

를 사용하여 웹 서버에서 JSON 데이터를 당기는하고이 들어 JSON을 처리하는 방법 반환되는 데이터입니다. 내가 현재 무엇입니까 출력은 다음과 같습니다

{lat: "53.399793333333", lng: "-6.3844516666667"} 

내가 작업 할 것은이를 변환하는 방법은

{lat: 53.399793333333, lng: -6.3844516666667} 

있습니까?

+0

JSON 문자열은 문자열 뿐이며 JSON에서도 할 수있는 모든 작업을 문자열로 처리 할 수 ​​있습니다. – VSG24

+0

그냥'data [i] .lat = parseFloat (data [i] .lat)' – mplungjan

+0

OP는 내가 생각하는 큰 따옴표를 제거하려고합니다. – VSG24

답변

1

parseFloat를 사용해보십시오 :

data[i].lat = parseFloat(data[i].lat); 
data[i].lng = parseFloat(data[i].lng); 
+1

원격 소스의 데이터에 대한 가정을하기 위해 수신 코드가 필요하므로이 솔루션을 사용하지 않는 것이 좋습니다. – JAAulde

2

문제는 그들 PHP 결과 MySQL에서 숫자의 검색이 문자열로 캐스팅되고 있다는 것입니다. (나는 PHP와 MySQL 사이의 관계가 타입을 존중하지 않는다는 것을 싫어한다.) JSON 직렬화는 문자열 타입을 적절히 유지한다.

이와 같이 검색하는 동안 값을 float으로 캐스팅해야합니다. 이렇게하면 JSON 직렬화가 문자열 대신 숫자로 값을 처리하게되고 수신 JS에서 터무니없는 문자열 조작이나 데이터 유형에 대한 가정이 필요하지 않게됩니다.

$result = mysql_query("select lat,lng from gpsdata limit 10"); 
$rows = array(); 
while($r = mysql_fetch_assoc($result)) { 
    $r['lat'] = (float) $r['lat']; 
    $r['lon'] = (float) $r['lon']; 

    $rows[] = $r; 
} 
+0

하지만 @JAAulde 당신은 생각하지 않는다. API 응답 시간이 늘어날 것이다. –

+1

@VishalGupta 나는 당신이 말하는 것을 들었지만,이 경우, 백만 행에 절대적으로 타입 -2의 값을 캐스팅하는 것은 그렇게 오래 걸리지 않을 것입니다. 이 분야에 앞서 많은 다른 분야의 성과를 해결해야 할 것이라고 확신합니다. 이 경우, MySQL/PHP는 함께 작업 할 때 유형을 존중하지 않기 때문에 PHP는 유형에 대해 신뢰할 수 있어야합니다. 또한 _something_이 변환을 수행해야합니다. PHP가 히트 또는 JS를 가져옵니다. – JAAulde

+0

또는 쿼리에서'CAST (lat AS DECIMAL (15,13))'를 사용하여 MYSQL이 모든 데이터 변환을 수행하도록 할 수 있습니다. 어떤 종류의 텍스트 또는 varchar – RiggsFolly