2011-06-02 144 views
1

更新1:字符串處理,去掉了一個逗號

這是我在嘗試建立字符串:

header('Content-type:application/json'); 

function getdata($the_query) 
{ 
    $connection = mysql_connect('server', 'user', 'pass') or die (mysql_error()); 
    $db = mysql_select_db('db_name', $connection) or die (mysql_error()); 

    $results = mysql_query($the_query) or die(mysql_error()); 

    $the_data = "{ 
      \"rss\": { 
       \"channels\" : [ 
        { 
         \"title\" : \"".$title."\", 
         \"link\": \"http://www.mycompany.com/external.php\", 
         \"description\": \"company description goes here\","; 

         while($row = mysql_fetch_array($results)) 
         { 
          extract($row); 

          $the_data .= "\"items\" : [ 
           { 
            \"title\": \"".$title."\", 
            \"link\": \"".$link."\", 
            \"guid\": \"".$link."\", 
            \"pubDate\": \"".$date."\", 
            \"description\": \"".$description."\" 
           } ],"; 
         } 

        $the_data .= "} ] 
       } 
       }"; 

    mysql_close($connection); 

    return $the_data; 
} 

原題:

我有一個字符串類似於此:

$mystring = "{ 
     \"rss\": { 
     \"channels\" : [ 
      { 
      \"title" : \"title goes here\", 
      \"link": \"link goes here\", 
      \"description": \"description goes here\", 
      \"items\" : [ 
       { 
       \"title\": \"title goes here\", 
       \"link\": \"url goes here\", 
       \"guid\": \"id goes here\", 
       \"pubDate\": \"data goes her\", 
       \"description\": \"description goes here\" 
       } ], 
      \"items\" : [ 
       { 
       \"title\": \"title goes here\", 
       \"link\": \"url goes here\", 
       \"guid\": \"id goes here\", 
       \"pubDate\": \"data goes her\", 
       \"description\": \"description goes here\" 
       } ], 
      \"items\" : [ 
       { 
       \"title\": \"title goes here\", 
       \"link\": \"url goes here\", 
       \"guid\": \"id goes here\", 
       \"pubDate\": \"data goes her\", 
       \"description\": \"description goes here\" 
       } ], 
     } ] 
     } 
    }"; 

如何刪除最後一個逗號?

+5

我想不出一個簡單的方法,因爲'json_decode()'不允許尾隨逗號。爲什麼它在那裏擺在首位?數據來自哪裏? – 2011-06-02 08:44:42

+0

看起來像JSON,你能否引用你的來源。 – doNotCheckMyBlog 2011-06-02 08:45:59

+0

也許我不是這樣做的最好方式,但該字符串(項目部分)是在一個循環中,因此尾隨逗號。什麼是創建json數據的正確方法? – oshirowanen 2011-06-02 08:49:16

回答

1

而不是固定的錯誤,你應該修正的原因,不插入在這最後一個逗號第一名。

最好是使用PHP的原生數據類型來建立數據結構,然後用json_encode將其轉換爲一個JSON數據字符串:

function getdata($the_query) 
{ 
    $connection = mysql_connect('server', 'user', 'pass') or die (mysql_error()); 
    $db = mysql_select_db('db_name', $connection) or die (mysql_error()); 

    $results = mysql_query($the_query) or die(mysql_error()); 
    $channel = array(
     'title'  => $title, 
     'link'  => 'http://www.example.com/external.php', 
     'description' => 'company description goes here', 
     'items'  => array() 
    ); 
    while ($row = mysql_fetch_array($results)) { 
     $channel['items'][] = array(
      'title'  => $row['title'], 
      'link'  => $row['link'], 
      'guid'  => $row['link'], 
      'pubDate'  => $row['date'], 
      'description' => $row['description'] 
     ); 
    } 
    mysql_close($connection); 
    $data = array('rss' => array('channels' => array($channel))); 
    return json_encode($data); 
} 
3

得到字符串的第一個

stripos函數( '',strrev($ myString的))

那麼你可以做任何你想要的,請更換反向的位置 ,刪除它,由你決定。

1

正如評論中提到的那樣,您可能會以錯誤的方式接近它。

但如果你真的想這樣做,這樣一來,下面將刪除最後一個逗號:

$mystring = preg_replace("/,(?![^,]*,)/",'',$mystring); 
+0

構建json數據的正確方法是什麼?我這樣做是我知道的唯一方法,即使用。=添加到字符串中,然後循環訪問數據庫以獲取循環的位。 – oshirowanen 2011-06-02 08:50:50

+0

請參閱更新後的問題。 – oshirowanen 2011-06-02 09:20:37

0

我會嘗試做當你生成它,它糾正。

我這樣做,我知道的唯一方法,即用添加到字符串。=然後通過數據庫循環,從而獲得從這個循環

位評論,它看起來像你只是建立自己的字符串。

雖然在循環,檢查哪些元素的數組你是在不添加逗號(例如原諒的僞性質)

$string .= item[i]; 
if($iterator < ($numberofitems-1){$string .=",";} 

很顯然,在你上面的例子,你將需要得到返回的行數,並檢查每個循環中是否還有更多。

這麼說,我贊成建設有http://www.php.net/manual/en/function.json-encode.php

0

的JSON你可以這樣做:

$pos= strripos($mystring, ","); 
$mystring[$pos]=" "; 
0

爲了使盡可能少的修改,因爲它是可能的(懶惰,錯誤的方式),你可以改變的方式$ the_data字符串創建:

 $pieces = array(); 
     while($row = mysql_fetch_array($results)) 
        { 
         extract($row); 

         $pieces[] = "\"items\" : [ 
          { 
           \"title\": \"".$title."\", 
           \"link\": \"".$link."\", 
           \"guid\": \"".$link."\", 
           \"pubDate\": \"".$date."\", 
           \"description\": \"".$description."\" 
          } ]"; 
        } 

       $the_data .= implode(',', $pieces); 

但與上面使用json_encode函數的答案,根據總體來說是更好的重寫代碼的整個塊。