Android JSON编码charset麻烦

时间:2014-12-30 17:21:25

标签: android json encoding

我的Android应用JSON编码有问题。无论我做什么,它都会将斜杠符号/输出为\/。我看了一些关于这方面的问题,但我还没有让它们起作用 这是我的代码。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.aaa);
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    final Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Perform action on click

            UUID uuid = UUID.randomUUID();
            String randomUUIDString = uuid.toString();

            Toast.makeText(MainTest.this, "button was pressed",
            Toast.LENGTH_SHORT).show();

            try {
                JSONObject json = new JSONObject();
                json.put("id", randomUUIDString);
                json.put("photoUrl", "https://mysite.com/2011/10/image.jpg");
                postData(json);

                } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    });
}


public void postData(JSONObject json) throws JSONException {
    HttpClient httpclient = new DefaultHttpClient();

    try {
        HttpPost httppost = new HttpPost(url_content);
        List<NameValuePair> nvp = new ArrayList<NameValuePair>();
        nvp.add(new BasicNameValuePair("json", json.toString()));
        httppost.setEntity(new UrlEncodedFormEntity(nvp));
        HttpResponse response = httpclient.execute(httppost);
        Log.i("TEST", json.toString(1));

        } catch (Exception e) {
        e.printStackTrace();
    }
}

此提示为

{
    "photoUrl": "https:\/\/mysite.com\/2011\/10\/image.jpg",
    "id": "7b34aa16-3c80-40b3-b12b-6decdd38fabc"
}

2 个答案:

答案 0 :(得分:0)

你需要逃避斜线。

json.put("photoUrl", "https:\//mysite.com\/2011\/10\/image.jpg")

另请注意,因为你没有" \"在原始字符串中,您可以轻松替换" \"用"" 使用str.replace("\", "");

如果您使用Gson,请尝试:

Gson gson = new GsonBuilder()..disableHtmlEscaping().create();

然后希望gson不会逃脱你的HTML

答案 1 :(得分:0)

它的JSON选项。在标记中嵌入JSON时允许\/会有所帮助,标记内部不允许</,如Seb指出的那样。

在Javascript中,额外的反斜杠被删除,所以:

console.log("AC\/DC"); // logs AC/DC

您可以在每个\之前使用/来阻止它,例如

json.put("photoUrl", "https:\//mysite.com\/2011\/10\/image.jpg")