如何使用JSON URL进行操作

3

我有一个类似下面这样的 JSON 对象:(以下链接是虚假的)

"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已经是字符串,为什么它们需要转义字符?我必须去掉它们才能调用URL上的方法来获取图片。我是否漏掉了什么?我正在使用Android进行此调用。

谢谢, 马特


这些URL有哪些转义字符? - Cristian
糟糕...我在这个网站的HTML创建器中输入时,它们可能已经被删除了。应该是像这样的:http://www.youtube.com\/inside\/kslkjfldkf\/234.jpg?v=7475646"。 - Swifty McSwifterton
4个回答

5
为什么URL会有转义字符,它们已经是字符串了?
它们具有转义字符 因为 它们是字符串--具体而言,它们是JSON字符串,因此具有JSON字符串转义字符,并且发送它们给您的实体决定使用转义斜线的选项。有关发送实体可能做出该选择的更多信息,请参见Why does the Groovy JSONBuilder escape slashes in URLs?文章。
我需要去掉转义字符才能调用 URL 并获取图片。我错过了什么吗?
采取简单的方法,只需使用一个优秀的JSON解析API,自动帮助您删除JSON转义字符,以便将JSON字符串转换为Java字符串时。 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);
    }
  }
}

非常感谢。这非常清晰和相关。非常感激。 - Swifty McSwifterton

1

我在你提供的URL中没有看到任何转义字符,但是URL仍然被编码了。我建议你看一下URLEncoder。这个类提供了不同的URL编码方式。

通常标准意味着使用UTF-8对URL进行编码。但是对于某些语言,编码和字符集可能会有所不同。最近我处理了包含亚洲字符的URL,并且它们是用其他字符集(例如韩文的eur-ko)进行编码的。

我使用this site手动解码/编码了一些URL并找出了字符集。

一旦你找到了正确的字符集,你可以使用Java sdk的Charset类将URL转换为普通的utf-16 java字符串。Tutorial here

祝好, Stéphane


当我在这个网站的HTML创建器中输入时,它们可能已被移除。应该像这样:http://www.youtube.com\/inside\/kslkjfldkf\/234.jpg?v=7475646"。我不确定这是否会改变你的答案。谢谢。 - Swifty McSwifterton
Matt,在Java中,字符串中的“/”始终在前面加上“\”。因此,您的问题不太清楚。如果您在Java中使用这些字符串,它们将可以直接使用。您想对它们做什么? - Snicolas
@Snicolas说:“在Java中,字符串中的/总是由\前缀--这根本不是真的。Java字符串文字规则没有要求用反斜杠(反斜线)转义斜杠(slash)。 - Programmer Bruce

1
为什么URL中已经是字符串,还要有转义字符呢?
由于:
1. 使用生成JSON的函数来生成JavaScript文字嵌入到 ``)。
因此,转义 `/` 字符可以确保数据在放入 `

0

'/' 字符可以被转义,符合 JSON 语法: http://www.json.org/。通常,无论你使用什么 JSON API,都应该能正确还原转义字符。

备注:根据评论进行更正。


2
这不是正确的。根据规范,斜杠可以选择性地转义。转义并非必需。 - Programmer Bruce
1
在 JSON 字符串字面量中必须转义的字符是引号、反斜杠和控制字符(U+0000 到 U+001F)。 - Programmer Bruce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接