2013-02-04 32 views
2

Twitter seach API返回一個JSON對象a.o.含鳴叫的唯一ID:如何在Twitter中存儲Twitter ID?

[id] => 2.9851634017882E+17 
[text] => foobar 

我在數據庫中存儲的ID創建一個MySQL bigint(20)場。但是,當我嘗試存儲該標識時,在數據庫中它只表示2(在本例中)。

我在做什麼錯?

回答

1

對於調用中的每個id,我建議在將值發送到PHP之前將值轉換爲字符串。

我正在用我自己的web應用程序來做這件事,它效果很好。我遇到了與API完全相同的問題。

ex。使用jQuery與Twitter的API

$.getJSON('https://api.twitter.com/1.1/search/tweets.json?q=api&callback=?', function(data){ 
    $.each(data, function() { 
    this.id_str = this.id_str + ""; // cast integer as string to avoid PHP int to float conversion on json_decode 

/* ... more API parsing code ... */ 

還請確保您的捕捉id_str值,而不是id值。當處理較大的ID時,id_str優於id,並且是less error prone

1

MySQL不知道2.9851634017882E+17作爲INT,因爲它不是。它將數字截斷爲它從輸入開頭找到的最長整數,即2。你需要把它作爲一個整數,而不是用科學的記數法。另外,如果這正是您從Twitter獲得的回報,那麼您甚至不知道該ID,因爲該號碼的精確度不會落到那個位置。

0

你得到的ID是一個浮點數。如果twitter爲你提供漂浮物作爲ID,我會非常驚訝。

你確定JSON對象沒有被所有將整數轉換爲浮點數的東西解析嗎?當你解決這個問題時,保存該值的問題就會解決。

+0

哎呦:這只是我想的PHP問題。 Twitter JSON給出了「id:298526548477214721」,但PHP的'json_decode'將它變成了'2.9851634017882E + 17'形式。我如何保留原始號碼? – Pr0no

+2

json_decode(options)中的最後一個參數可以保存值JSON_BIGINT_AS_STRING,它將阻止您的整數偏移。 – arjan

0

Twitter的ID被分類爲64-bit integers。存儲它們是最好的行動方式。在MySQL中,數據類型爲BIGINT

由於不同的JSON口譯與解析BIGINT我的首選方法鬥爭是根據自己的規格消耗飼料:

...考慮儘快轉化爲ID的_STR版本爲 可能。

作爲JSON消費者,我會解釋ID的_str版本並將此「安全」值插入到BIGINT列中。

相關問題