2011-07-03 16 views
2

我有一個JSON對象,它看起來像這樣的工作:(以下鏈接是假的)如何使用JSON URL

"results": { 
    "urlStuff": [ 
     {"pic_url": "http:\/\/www.youtube.com\/inside\/kslkjfldkf\/234.jpg?v=7475646"}, 
     {"other_pic_url": "http:\/\/www.youtube.com\/outside\/kslkjfldkf\/234.jpg?v=7475646"} 
    ] 
} 

或諸如此類的話。我的問題是,爲什麼這些網址如果已經是字符串就有轉義字符?我不得不擺脫他們,使該方法調用URL來獲取圖片。我錯過了什麼嗎?我正在使用Android進行此調用。

謝謝, 馬特

+0

這些URL有哪些轉義字符? – Cristian

+0

廢話......當我在這個網站的HTML創建者中鍵入它時,一定是把它們取出來了。 http:\/\/www.youtube.com \/inside \/kslkjfldkf \ /234.jpg?v = 7475646「應該是這樣的。 –

回答

4

爲什麼這些網址如果已經是字符串就有轉義字符?

他們有轉義字符因爲他們都是字符串 - 具體而言,因爲他們是JSON字符串他們有JSON字符串轉義字符,並送他們到你的實體決定使用該選項逃脫斜線。有關發送實體可能做出該選擇的更多信息,請參閱Why does the Groovy JSONBuilder escape slashes in URLs?信息。

我不得不擺脫他們,使該方法調用URL來獲取圖片。我錯過了什麼嗎?

將JSON字符串轉換爲Java字符串時,採取簡單的方法,只需使用體面的JSON解析API即可自動爲您刪除JSON轉義字符。 Android有這樣一個內置的JSON庫可用。

package com.stackoverflow.q6564078; 

import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class Foo extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // {"pic_url": "http:\/\/www.youtube.com\/inside\/kslkjfldkf\/234.jpg?v=7475646"} 
    String jsonInput = "{\"pic_url\": \"http:\\/\\/www.youtube.com\\/inside\\/kslkjfldkf\\/234.jpg?v=7475646\"}"; 
    Log.d("JSON INPUT", jsonInput); 
    // output: {"pic_url": "http:\/\/www.youtube.com\/inside\/kslkjfldkf\/234.jpg?v=7475646"} 

    try 
    { 
     JSONObject jsonObject = new JSONObject(jsonInput); 
     String javaUrlString = jsonObject.getString("pic_url"); 
     Log.d("JAVA URL STRING", javaUrlString); 
     // output: http://www.youtube.com/inside/kslkjfldkf/234.jpg?v=7475646 
    } 
    catch (Exception e) 
    { 
     throw new RuntimeException(e); 
    } 
    } 
} 
+0

非常感謝。這非常明確和相關。非常感激。 –

1

我看不出你提供的,但儘管如此,網址編碼的網址,任何轉義字符。我建議你看看URLEncoder。這個類提供了不同的URL編碼方式。

通常的標準意味着網址使用UTF-8編碼。但是,對於某些語言,編碼和字符集可以不同。最近,我不得不處理包含亞洲字符的網址,並以其他字符編碼(例如,韓語爲eur-ko)。

我以前this site解碼/編碼maually幾個網址,並找出的字符集。

一旦你找到了正確的字符集來使用,你可以使用字符集類的Java SDK來的網址轉換成正常的UTF-16 Java字符串。 Tutorial here

問候, 斯特凡

+0

當我在這個網站的HTML創建者中輸入它時,一定會將它們取出來。 http:\/\/www.youtube.com \/inside \/kslkjfldkf \ /234.jpg?v = 7475646「應該是這樣的。我不確定這是否會改變你的答案。謝謝。 –

+0

謝謝。閱讀。得到它了。 –

+0

馬特,在java中,一個字符串中總是有一個\。所以你的問題還不清楚。如果你在java中使用這些字符串,他們可以開箱即用。你想和他們做什麼? – Snicolas

0

'/' 字符 必須 可以轉義,按照JSON語法:http://www.json.org/。通常,無論您使用哪種JSON API,都應該正確地還原轉義字符。

編輯:更正爲每評論

+2

這是不正確的。根據規範,固體可以選擇逃脫。轉義它並不是必需的。 –

+1

必須在JSON字符串文字中轉義的字符是引號,反轉立體聲和控制字符(U + 0000到U + 001F)。 –

1

爲什麼網址都具有轉義字符,如果他們已經是字符串?

時間:

  1. 的情況並不少見使用JSON生成函數,以產生的JavaScript文字爲內部<script>元件
  2. HTML通常嵌入在JSON和
  3. 序列嵌入</將終止在HTML 4腳本塊(和</script>將在所有的瀏覽器)

...逃逸/字符,確保數據將是安全的拖放到<script>元素。

我不得不擺脫他們,使該方法調用URL來獲取圖片。

你的JSON圖書館應該爲你做的。錯誤...你使用JSON庫,而不是嘗試一些瘋狂的涉及正則表達式,是不是?

+0

當然可以。我知道必須有更好的方法。 –