2011-07-03 30 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

当然可以。我知道必须有更好的方法。 –