2016-06-01 4 views
0

Мне нужна помощь с массивом JSON, созданным PHP. Это пример кодаPHP/JSON Array двойные кавычки

[{"flightnum":"IV7050","deptime":"2016-06-01 16:47:00","arrtime":"17:01:39","gs":"397","alt":"26955","lat":"41.340347359635","lng":"-72.46185414378","phasedetail":"Climbing","timeremaining":"07:45:00","online":"No","depicao":"KJFK","arricao":"LFPO","heading":"68","distremain":"3080","aircraftname":"B747-400", 

"zone":**--THIS-->"<--THIS--**[{"Latitude":34.647995,"Longitude":-86.738549}]**--THIS-->"<--THIS--**, 

"code":"IV","pilotid":"IV0018","firstname":"Mattia","lastname":"test","deplat":"40.6398","deplng":"-73.7789","arrlat":"48.7253","arrlng":"2.35944","route_details":[],"percomplete":2.32,"distremaining":"3080","pilotname":"Mattia"}] 

Я добавил поле под названием «зона», но как удалить двойные кавычки, отмеченные только для этого поля?

+5

Сомневаюсь PHP (например, 'json_encode()') создал это. Это незаконно/недействительно json. вы должны были создать JSON вручную, что означает, что вы должны исправить код, создающий json, а не пытаться исправить/исправить мусор, который он произвел. –

+1

Как генерируется эта строка JSON? – Ben

+0

используйте 'json_decode' on' [{"Latitude": 34.647995, "Longitude": - 86.738549}] 'перед добавлением значения, затем используйте' json_encode' – JustOnUnderMillions

ответ

0

Используя preg_replace, вы можете просто удалить дополнительные кавычки, но это не решение. Да; это поможет, но проблема заключается в том, чтобы выяснить, почему у вас есть эти цитаты в вашей строке. Итак, приведенный ниже код решает эту проблему; временно:

<?php 

     $json = '[ 
     {"flightnum":"IV7050","deptime":"2016-06-01 16:47:00","arrtime":"17:01:39","gs":"397","alt":"26955","lat":"41.340347359635", 
     "lng":"-72.46185414378","phasedetail":"Climbing","timeremaining":"07:45:00","online":"No","depicao":"KJFK","arricao":"LFPO","heading":"68", 
     "distremain":"3080","aircraftname":"B747-400", 
     "zone":"[{"Latitude":34.647995,"Longitude":-86.738549}]", 
     "code":"IV","pilotid":"IV0018","firstname":"Mattia","lastname":"test","deplat":"40.6398", 
     "deplng":"-73.7789","arrlat":"48.7253","arrlng":"2.35944","route_details":[], 
     "percomplete":2.32,"distremaining":"3080","pilotname":"Mattia"} 
     ]'; 


     $json = preg_replace("#(\")(\[\{)(.*)(\}\])(\")#", "$2$3$4", $json); 

     var_dump(json_decode($json)); 

ВЫХОД ИЗ УАК DUMP

 array (size=1) 
      0 => 
      object(stdClass)[1] 
       public 'flightnum' => string 'IV7050' (length=6) 
       public 'deptime' => string '2016-06-01 16:47:00' (length=19) 
       public 'arrtime' => string '17:01:39' (length=8) 
       public 'gs' => string '397' (length=3) 
       public 'alt' => string '26955' (length=5) 
       public 'lat' => string '41.340347359635' (length=15) 
       public 'lng' => string '-72.46185414378' (length=15) 
       public 'phasedetail' => string 'Climbing' (length=8) 
       public 'timeremaining' => string '07:45:00' (length=8) 
       public 'online' => string 'No' (length=2) 
       public 'depicao' => string 'KJFK' (length=4) 
       public 'arricao' => string 'LFPO' (length=4) 
       public 'heading' => string '68' (length=2) 
       public 'distremain' => string '3080' (length=4) 
       public 'aircraftname' => string 'B747-400' (length=8) 
       public 'zone' => 
       array (size=1) 
        0 => 
        object(stdClass)[2] 
         ... 
       public 'code' => string 'IV' (length=2) 
       public 'pilotid' => string 'IV0018' (length=6) 
       public 'firstname' => string 'Mattia' (length=6) 
       public 'lastname' => string 'test' (length=4) 
       public 'deplat' => string '40.6398' (length=7) 
       public 'deplng' => string '-73.7789' (length=8) 
       public 'arrlat' => string '48.7253' (length=7) 
       public 'arrlng' => string '2.35944' (length=7) 
       public 'route_details' => 
       array (size=0) 
        empty 
       public 'percomplete' => float 2.32 
       public 'distremaining' => string '3080' (length=4) 
       public 'pilotname' => string 'Mattia' (length=6) 
+0

Я почти уверен, что «-THIS -> \" <- THIS-- "должен был указывать только те персонажи, которые нарушали его JSOn – Borjante

+0

@Borjante Ahhhhhaaaaa LOL ..... OK ..... Получил это сейчас ..... Спасибо, что указали, что вне – Poiz

1

спасибо всем за ваш ответ, я решил эту проблему с помощью json_decode Перед вставкой данных в массиве. но теперь у вас есть другой вопрос:

Как добавить liverefresh для полилинии на этот код?

У меня уже есть функция liverefresh, но ломаной линии не работают

var flightMarkers = []; 
    var routeMarkers = []; 
    var flightPath = null; 
    var depMarker = null, arrMarker = null; 
    var info_window= null; 
    var run_once = false; 
    var mapOptions = { 
    zoom: 4, 
    center: new google.maps.LatLng(47.437047,19.248515), 
    mapTypeId: google.maps.MapTypeId.ROADMAP }; 
    var map = new google.maps.Map(document.getElementById("acarsmap"), mapOptions); 
    var weatherLayer = new google.maps.weather.WeatherLayer({ temperatureUnits: google.maps.weather.TemperatureUnit.CELSIUS }); weatherLayer.setMap(null); 
    var cloudLayer = new google.maps.weather.CloudLayer(); cloudLayer.setMap(null) 
    setWindSpeed(google.maps.weather.WindSpeedUnit.KILOMETERS_PER_HOUR) 
    var defaultOptions = { 
    autozoom: true, 
    refreshTime: 5000, 
    autorefresh: true 
    }; 
      function toggleClouds() { 
      cloudLayer.setMap(cloudLayer.getMap() ? null : map); 
      } 
      function toggleIcons() { 
      weatherLayer.setMap(weatherLayer.getMap() ? null : map); 
      } 
      function setWindSpeed(units) { 
      weatherLayer.setOptions({'windSpeedUnits': units}); 
      } 
    var options = $.extend({}, defaultOptions, acars_map_defaults); 




    // They clicked the map 
    google.maps.event.addListener(map, 'click', function() 
    { 
     clearPreviousMarkers(); 
    }); 

    liveRefresh(); 
    if(options.autorefresh == true) 
    { 
     setInterval(function() { liveRefresh(); }, options.refreshTime); 
    } 

    function liveRefresh() 
    { 
     $.ajax({ 
      type: "GET", 
      url: url + "/action.php/acars/data_test", 
      dataType: "json", 
      cache: false, 
      success: function(data) 
      { 
       populateMap(data); 
      } 
     }); 
    }; 

    function populateMap(data) 
    { 
     clearMap(); 
     $("#pilotlist").html(""); 

     if (data.length == 0) { 
      return false; 
     } 

     var lat, lng; 

     var details, row, pilotlink; 
     var bounds = new google.maps.LatLngBounds(); 

     for (var i = 0; i < data.length; i++) 
     { 
      if(data[i] == null || data[i].lat == null || data[i].lng == null 
       || data[i].lat == "" || data[i].lng == "") { 
       continue; 
      } 

      lat = data[i].lat; 
      lng = data[i].lng; 


      if(i%2 == 0) 
       data[i].trclass = "even"; 
      else 
       data[i].trclass = "odd"; 

      // Pull ze templates! 
      var map_row = tmpl("acars_map_row", {flight: data[i]}); 
      var detailed_bubble = tmpl("acars_map_bubble", {flight: data[i]}); 

      $('#pilotlist').append(map_row); 

      var pos = new google.maps.LatLng(lat, lng); 

      var image = new google.maps.MarkerImage(url+"/lib/images/inair/"+data[i].heading+".png", 
        new google.maps.Size(41,41), 
        new google.maps.Point(0, 0), 
        new google.maps.Point(20, 20)    
        ); 

      flightMarkers[flightMarkers.length] = new google.maps.Marker({ 
       position: pos, 
       map: map, 
       icon: image, 
       flightdetails: data[i], 
       infowindow_content: detailed_bubble 
      }); 

      bounds.extend(pos); 

      google.maps.event.addListener(flightMarkers[flightMarkers.length - 1], 'click', function() 
      { 


       var focus_bounds = new google.maps.LatLngBounds(); 

       // Flight details info window 
       info_window = new google.maps.InfoWindow({ 
        content: this.infowindow_content, 
        position: this.position 
       }); 

       info_window.open(map, this); 


       var dep_location = new google.maps.LatLng(this.flightdetails.deplat, this.flightdetails.deplng); 
       var arr_location = new google.maps.LatLng(this.flightdetails.arrlat, this.flightdetails.arrlng); 


       depMarker = new google.maps.Marker({ 
        position: dep_location, 
        map: map, 
        icon: depicon, 
        title: this.flightdetails.depname, 
        zIndex: 100 
       }); 


       arrMarker = new google.maps.Marker({ 
        position: arr_location, 
        map: map, 
        icon: arricon, 
        title: this.flightdetails.arrname, 
        zIndex: 100 
       }); 


       focus_bounds.extend(this.position); 

       var something = []; 
       $.each(this.flightdetails.puntirotta, function(key, val) { 
       something.push(new google.maps.LatLng(val.Latitude, val.Longitude)); 
       }); 

//THIS IS THE POLYLINE I WOULD ADD TO LIVE REFRESH 
       flightPath = new google.maps.Polyline({ 
        path: something, 
        strokeColor: "#FF0000", 
        geodesic : true, 
        strokeOpacity: 1.0, 
        strokeWeight: 2 
       }); 

       map.fitBounds(focus_bounds); 
       flightPath.setMap(map); 

      }); 
     } 

     // If they selected autozoom, only do the zoom first time 
     if(options.autozoom == true && run_once == false) 
     { 
      map.fitBounds(bounds); 
      run_once = true; 
     } 
    } 


    function clearPreviousMarkers() 
    { 
     if(info_window) 
     { 
      info_window.close(); 
      info_window = null; 
     } 

     if(depMarker != null) 
     { 
      depMarker.setMap(null); 
      depMarker = null; 
     } 

     if(arrMarker != null) 
     { 
      arrMarker.setMap(null); 
      arrMarker = null; 
     } 

     if(routeMarkers.length > 0) 
     { 
      for(var i = 0; i < routeMarkers.length; i++) { 
       routeMarkers[i].setMap(null); 
      } 
     } 

     routeMarkers.length = 0; 

     if(flightPath != null) 
     { 
      flightPath.setMap(null); 
      flightPath = null; 
     } 
    } 

    function clearMap() 
    { 
     if(flightMarkers.length > 0) 
     { 
      for(var i = 0; i < flightMarkers.length; i++) { 
       flightMarkers[i].setMap(null); 
      } 
     } 

     flightMarkers.length = 0; 

     if(routeMarkers.length > 0) 
     { 
      for(var i = 0; i < routeMarkers.length; i++) { 
       routeMarkers[i].setMap(null); 
      } 
     } 

     routeMarkers.length = 0; 
    } 
Смежные вопросы