2016-06-01 16 views
0

Ich brauche Hilfe mit dem JSON-Array von PHP erstellt. Dies ist der BeispielcodePHP/JSON Array doppelte Anführungszeichen

[{"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"}] 

Ich habe ein Feld „Zone“ genannt hinzugefügt aber wie entferne ich die doppelten Anführungszeichen markiert nur für diesen Bereich?

+5

Ich bezweifle, PHP (z 'json_encode()') erstellt, dass. Es ist illegal/ungültig json. Sie müssen den JSON manuell erstellt haben, was bedeutet, dass Sie den Code reparieren sollten, der den JSON erstellt, und nicht versuchen, den von ihm erzeugten Müll zu korrigieren. –

+1

Wie wird diese JSON-Zeichenfolge generiert? – Ben

+0

Verwenden Sie 'json_decode' auf' [{"Latitude": 34.647995, "Longitude": - 86.738549}] 'bevor Sie den Wert hinzufügen, verwenden Sie' json_encode' – JustOnUnderMillions

Antwort

0

Mit preg_replace könnten Sie nur die zusätzlichen Anführungszeichen entfernen, aber das ist nicht wirklich eine Lösung. Ja; Es wird helfen, aber das Problem ist, herauszufinden, warum Sie diese Zitate in Ihrer Zeichenfolge haben. Der folgende Code löst dieses Problem. vorübergehend:

<?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)); 

OUTPUT DES VAR 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

Ich bin mir ziemlich sicher, dass "--THIS -> \" <- THIS-- "war nur, um die Zeichen anzuzeigen, die brechen waren seine JSOn – Borjante

+0

@Borjante Ahhhhhaaaaa LOL ..... OK ..... Habe es jetzt ..... Danke für das darauf hin – Poiz

1

Dank allen für Ihre Antwort, habe ich das Problem gelöst durch die Verwendung json_decode vor dem Einsetzen Daten in Array. aber jetzt eine andere Frage haben,

Wie kann ein LiveRefresh für Polyline auf diesen Code hinzufügen?

Ich habe bereits eine liverefresh Funktion, sondern auch für die Polylinie nicht funktionieren

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; 
    } 
Verwandte Themen