Visualizzazione dei risultati da 1 a 5 su 5

Discussione: php e json encode

  1. #1

    php e json encode

    Ciao a tutti
    essendo poco pratico di json, array e quant'altro, da giorni sto sbattendo la testa contro il muro per un problema che, spero, per qualcuno di voi possa essere di facile soluzione.

    Ho un file xml che converto in json tramite json-encode
    il punto è che però vorrei codificare solo una parte e non l'intero xml.


    Questo e un estratto della sorgente del file XML
    <channel>
    <atom:link href="rss.php" rel="self" type="application/rss+xml" />
    <title>Mynf Feed RSS</title>
    <link>vuoto</link>
    <description>News</description>
    <copyright>Copyright MyNF</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <language>IT-it</language>

    <item>
    <title><![CDATA[Boomk]]></title>
    <dc:creator><![CDATA[Stestri]]></dc:creator>
    <category>News</category>
    <pubDate>Sun, 28 Jul</pubDate>
    <guid>vuoto</guid>
    <description><![CDATA[21 ottobre 2013Locale></description>
    </item>

    <item>
    <title><![CDATA[Baik]]></title>
    <dc:creator><![CDATA[Sri]]></dc:creator>
    <category>News</category>
    <pubDate>Sun, 28 Jul</pubDate>
    <guid>vuoto</guid>
    <description><![CDATA[21 giugno 2013Locale></description>
    </item>

    <item>
    <title><![CDATA[Jeni]]></title>
    <dc:creator><![CDATA[Stestri]]></dc:creator>
    <category>News</category>
    <pubDate>Sun, 21 Jul</pubDate>
    <guid>vuoto</guid>
    <description><![CDATA[14 ottobre 2013Locale></description>
    </item>

    <item>
    ......
    .....
    </item>
    </channel>



    Vorrei convertire in json solo il <title> e la <description> di ciascun <item>.

    Continuerò a provare e riprovare, ma se qualcuno mi può fornire la soluzione gliene sarei grato

  2. #2
    Dovresti iterate l'xml e inserire in un array solo i campi che ti occorrono, così che poi puoi utilizzare la funzione json_encode sull'array che hai creato.
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  3. #3
    Grazie per la celere risposta
    ...ci sto provando, e ho scritto questo codice.
    Mi restituisce "title" e "description", tuttavia non in formato json valido....
    In Json Validator ho notato che tra un item e l'altro c'è ][ anziché },{ per cui gli elementi non vengono interpretati come oggetti ma solo come stringhe in sequenza
    (se uso un linguggio poco tecnico è perchè sono alquanto alle prime armi)

    Ecco il codice:
    $xml_file = 'http://www.blablabla.it/xxxx/rsspippo.php';
    $xml = file_get_contents($xml_file);
    $xml = preg_replace('~\s*(<([^>]*)>[^<]*</\2>|<[^>]*>)\s*~','$1',$xml);
    $xml = simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA);
    foreach ($xml->channel->item as $item)
    {
    $arr = array(
    $item['title'] = (string) $item->title,
    $item['description']= (string) $item->description,
    );

    echo json_encode($arr);
    }
    ?>

  4. #4
    Hai fatto un po di confusione.
    Dovresti fare così.
    Codice PHP:
    $arr=array();
    foreach (
    $xml->channel->item as $item
    {
    $arr [] = array (
                
    'title' =>( string )  $item->title
                
    'description' => ( string ) $item->description );
    );

    echo 
    json_encode($arr); 
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  5. #5
    Ciao codencode,
    dopo un paio di prove ho apportato una modifica alla penultima riga, dove al posto di ); ho messo } e ora ho un ritorno json valido esattamente come richiesto.
    Ti ringrazio infinitamente dell'aiuto, le pareti di casa mia te ne sono grate perche a forza di testate nel muro le stavo distruggendo.

    Se può essere di aiuto ad altri che cercheranno qcosa di simile, ricordo che la mia necessità era di converitre un file Rss in Json, estraendo e convertendo in json soltanto alcuni campi del mio Feed (nel mio caso erano "title" e "description")


    Ecco il codice funzionante:

    $xml_file = 'url al mio feed Rss';
    $xml = file_get_contents($xml_file);
    $xml = preg_replace('~\s*(<([^>]*)>[^<]*</\2>|<[^>]*> )\s*~','$1',$xml);
    $xml = simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA);

    $arr = array();
    foreach ($xml->channel->item as $item)
    {
    $arr[] = array (
    'title' => (string) $item->title,
    'description' => (string) $item->description );
    }
    echo json_encode($arr);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.