2016-06-01 20 views
0

PHPで作成されたJSON配列のヘルプが必要です。これは私が「ゾーン」と呼ばれるフィールドを追加しているが、どのように私は、このフィールドにマークされ、二重引用符を削除するにはサンプルコード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":**--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

私は(例えば 'json_encode()')は、PHPを疑う働くことを作成しないでください。それは違法/無効なjsonです。 JSONを手動で構築していなければなりません。つまり、jsonを構築するコードを修正し、作成したゴミを修正/修正しないようにする必要があります。 –

+1

このJSON文字列はどのように生成されますか? – Ben

+0

値を追加する前に '[{Latitude":34.647995、 "Longitude": - 86.738549}] 'に' json_decode'を使用してから 'json_encode'を使用してください – JustOnUnderMillions

答えて

0

preg_replaceを使用すると、余分な引用符を削除できますが、それは実際の解決策ではありません。はい;それは助けになるだろうが、問題はあなたの文字列にそれらの引用符がある理由を見つけることです。したがって、以下のコードはこの問題を解決します。一時的に:VARのDUMP OF

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

 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 Ahhhhhaaaa LOL ..... OK .....それを今すぐ見つけました。それを指摘してくれてありがとう – Poiz

1

あなたの答えのためのすべてのおかげで、私は、配列の挿入データの前json_decodeを使用して問題を解決しました。

このコードでポリラインのライブリフレッシュを追加するにはどうすればよいですか?

は、私はすでに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; 
    } 
関連する問題