當前位置:首頁 » 安卓系統 » androidjavajson

androidjavajson

發布時間: 2022-09-13 17:15:57

javaweb返回給Android客戶端json中文字元亂碼

JavaWeb的各種中文亂碼終極解決方法:一、Servlet輸出亂碼1. 用servlet.getOutStream位元組流輸出中文,假設要輸出的是String str ="測試中文"。1.1 若是本地伺服器與本地客戶端這種就不用說了,直接可以out.write(str.getBytes())可以輸出沒有問題。因為伺服器中用str.getBytes()是採用默認本地的編碼,比如GBK。而瀏覽器也解析時也用本地默認編碼,兩者是統一的,所以沒有問題。1.1 若伺服器輸出時用了, out.write(str.getBytes("utf-8"))。而本地默認編碼是GBK時(比例在中國),那麼用瀏覽器打開時就會亂碼。因為伺服器發送過來的是utf-8的1010數據,而客戶端瀏覽器用了gbk來解碼,兩者編碼不統一,肯定是亂碼。當然,你也可以自己將客戶端瀏覽器的編碼手工調用下(IE菜單是:查詢View->編碼encoding->utf-8),但是這種操作很爛,最好由伺服器輸出響應頭告訴,瀏覽器用哪種編碼來解碼。所以要在伺服器的servlet中,增加response.setHeader("content-type","text/html;charset=utf-8"),當然也可直接用簡單的response.setContentType("text/hmtl;charset=utf-8")。兩種的操作是一樣一樣的。2. 用servlet.getWirter字元流輸出中文,假設要輸出的是String str ="測試中文亂碼"。2.1 若寫成out.print(str)輸出時,客戶端瀏覽器顯示的將全是多個?????的字元,代表在編碼表中肯定就找不到相應的字元來顯示。原因是:servlet.getWriter()得到的字元輸出流,默認對字元的輸出是採用ISO-8859-1,而ISO-8859-1肯定是不支持中文的。所以肯定要首先要做的第一件事:是要將伺服器對象輸出字元能支持中文的。其次伺服器向客戶端寫回的響應頭要告訴客戶端是用了哪種編碼表進行編碼的。而實現這兩個需求,只需要response.setContentType("text/hmtl;charset=utf-8")。就搞定了。特別注意:response.setContentType("text/html;charset=utf-8")要放在PrintOut out = response.getWriter()代碼的前面,否則只是有告訴客戶端用什麼碼表編碼的功能,而伺服器端還是用ISO-8859-1編碼了。再特別提示下:在同一Servlet中的doGet或doPost方法中,不能既用response.getOutputStream又用response.getWriter,因為這兩種response的響應輸出位元組流與字元流是沖突的,只能用其一。二、Servlet文件下載,中文亂碼情況。關鍵是下載時響應頭 content-disposition中attachment;filename=文件名。這個文件名filename不能是含有中文字元串的,要用URLEncoding編碼進行編碼,才能進行進行http的傳輸。三、Servlet的response增加addCookie,cookie中value的中文碼問題解決方法。若想將cookie中存放中文的值,必須用Base64編碼後,發給客戶瀏覽器端進入存儲。而下次客戶端瀏覽訪問是帶回來的cookie中的值,是經過Base64編碼的,所以需要用Base64解碼即可。 Base64編碼主要是解決將特殊字元進行重新編碼,編碼成a-b、A-B、0-9、+與/,字元52,10個數字與一個+,一個/ 共64個字元。它的原理是將原來3個位元組的內容編碼成4個位元組。主要是取位元組的6位後,在前面補00組成一個新的位元組。所以這樣原來的3個位元組共24,被編碼成4個位元組32位了。四、獲取請求參數亂碼GET方式的亂碼:如CN,直接用request.getParameter得到的字元串strCN將會亂碼,這也是因為GET方式是用http的url傳過來的默認用iso-8859-1編碼的,所以首先得到的strCn要再用iso-8859-1編碼得到原文後,再進行用utf-8(看具體頁面的charset是什麼utf-8或gbk)進行解碼即可。new String(strCn.getBytes(「ISO-8859-1」),「UTF-8」);Javaweb返回給Android客戶端json中文字元亂碼

② Android將伺服器傳來的json解析為數組變數,通過java文件simpleadapter輸出到頁面。

我做了一個代碼如下:
{

ListViewlistview;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.listview);
Stringtemp="[{"aa":"1","bb":"2"},{"aa":"3","bb":"4"},{"aa":"5","bb":"6"}]";
List<Map<String,Object>>data=getList(temp);
SimpleAdapteradapter=newSimpleAdapter(this,data,R.layout.item,newString[]{"aa","bb"},newint[]{R.id.aa,R.id.bb});
listview.setAdapter(adapter);
}

publicMap<String,Object>getMap(StringjsonString){
JSONObjectjsonObject;
try{
jsonObject=newJSONObject(jsonString);
@SuppressWarnings("unchecked")
Iterator<String>keyIter=jsonObject.keys();
Stringkey;
Objectvalue;
Map<String,Object>valueMap=newHashMap<String,Object>();
while(keyIter.hasNext()){
key=(String)keyIter.next();
value=jsonObject.get(key);
valueMap.put(key,value);
}
returnvalueMap;
}catch(JSONExceptione){
e.printStackTrace();
}
returnnull;
}

publicList<Map<String,Object>>getList(StringjsonString){
List<Map<String,Object>>list=null;
try{
JSONArrayjsonArray=newJSONArray(jsonString);
JSONObjectjsonObject;
list=newArrayList<Map<String,Object>>();
for(inti=0;i<jsonArray.length();i++){
jsonObject=jsonArray.getJSONObject(i);
list.add(getMap(jsonObject.toString()));
}
}catch(Exceptione){
e.printStackTrace();
}
returnlist;
}
}

item的布局文件

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<TextView
android:id="@+id/aa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"/>

<TextView
android:id="@+id/bb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:textColor="#f00"
android:textSize="30sp"/>

</LinearLayout>


最後的界面效果:

③ android怎麼將javabean轉換成json

前提條件是javaBean必須有getter和setter方法而且,必須有無參的構造方法
package com.cn.parse_json;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.lang.reflect.Field;
import org.json.JSONObject;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
public class ParseJson2BeanUtils {
public static <T> T parseJson2Bean(JSONObject object,Class<T> clazz ) throws Exception{
FileInputStream fis = new FileInputStream("/mnt/sdcard/json.txt");
int len = fis.available();
byte[] buffer = new byte[len];
fis.read(buffer);
object = new JSONObject(new String(buffer));
T newInstance = null;
Field[] fields = clazz.getFields();
//只要保證clazz有一個無參的public構造方法就不可能發生異常
try {
newInstance = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
for(int i = 0;i< fields.length;i++){
String name = fields[i].getName();
//不可能發生的異常
try {

String jsonName = name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());
if(object.has(jsonName)){
if(jsonName.equals("ResultCode")){
fields[i].set(newInstance, object.getInt(jsonName));
}else{
fields[i].set(newInstance, object.getString(jsonName));
}
Log.i("name", name+"****");

}
//Log.i("name", jsonName+":"+object.has(jsonName)+object.getString(jsonName));

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

return newInstance;
}
}

④ 為什麼android2.2和java json包沖突應該怎麼解決,求各位高人指點。

androidsdk已經將官方的json包集成在內,無需您在額外引用的。引用的時候,庫要載入json外包

⑤ android (JAVA) 求兩組不同結構的JSON,根據其中相同的KEY,數據連接

最基礎的方法就是循環

⑥ android中使用JAVA解析json數據

這個格式使用如下代碼解析

try{
JSONObjectjsonObject=newJSONObject(json);
JSONObjectweatherinfo=jsonObject.getJSONObject("weatherinfo");

System.out.println(weatherinfo.getString("city"));
System.out.println(weatherinfo.getString("cityid"));
System.out.println(weatherinfo.getString("temp"));
System.out.println(weatherinfo.getString("WD"));

}catch(JSONExceptione){
e.printStackTrace();
}
其中第一行代碼JSONObjectjsonObject=newJSONObject(json);//json即為你的字元串

比如現在天氣信息是多個城市的,並非只有北京市。
{"weatherinfo":[{"city":"北京","cityid":"101010100","temp":"4","WD":"東風","WS":"2級","SD":"75%","WSE":"2","time":"10:45","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暫無實況","qy":"1011"},{"city":"天津","cityid":"101010100","temp":"4","WD":"東風","WS":"2級","SD":"75%","WSE":"2","time":"10:45","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暫無實況","qy":"1011"}]}
以下代碼適用。

try{
JSONObjectjsonObject=newJSONObject(json);
JSONArrayjsonArray=jsonObject.getJSONArray("weatherinfo");
for(inti=0;i<jsonArray.length();i++){
JSONObjectobject=jsonArray.getJSONObject(i);
System.out.println(object.getString("city"));
System.out.println(object.getString("cityid"));
System.out.println(object.getString("temp"));
System.out.println(object.getString("WD"));
}
}catch(JSONExceptione){
e.printStackTrace();
}

⑦ android用java處理二維json數組並放入listview中。

用谷歌提供的gson包,或者是阿里巴巴提供的fastjson包,方便快捷。

把javabean的裡面的變數的聲明和json關鍵詞一樣。

比如{"id":"30","title":"��������","num":"3","author":"���B��","lpostt":"2015-01-07 19:33:50"}

javabean就為
publicclassBean{
privateStringid;
privateStringtitle;
privateStringnum;
privateStringauthor;
privateStringlpostt;
...//get和set我就不寫了
}

fastjson包使用:

importcom.alibaba.fastjson.JSONObject;
...
JSONObjectobject=JSON.parseObject(String);//這是獲取一個JSONObject對象使用方法和org.json.JSONObject差不多
//Bean中的變數名必須和返回過來的JSON串裡面的參數一樣,不一樣的變數名將不會有數據。多了或者少了不會有影響。
List<Bean>beanList=JSON.parseArray(String,Bean.class);//JSON數組,解析成一個list
Beanbean=JSON.parseObject(String,Bean.class)//JSON數據,解析成一個對象

如果JSON中的元素還有JSON數據,比如{「id」:{"data","123"}}

publicclassBean{
privateDataid;
...//省略get和set
}
//下面是另一個javabean文件
publicclassData{
privateStringdata;
...//省略get和set
}

解析的辦法和上面一樣。是json數組就在javabean裡面定義list。

使用Gson包和fastjson類似,但是還是有區別

Gsongson=newGson();//需要先實例化一個Gson對象
Beanbean=gson.fromJson(String,Bean.class);//JSON數據,返回一個Bean對象
List<Bean>beanList=gson.fromJson(String,newTypeToken<List<Bean>>(){}.getType());//JSON數組,返回一個List對象

最後,當你將你的JSON數據解析成了List,難道放入ListView中不就輕而易舉了嗎?

不知道為什麼附件不能上傳,你就只能自行下載了。搜一下就出來了

⑧ java怎麼接收android請求過來的json數據

java接收android請求json數據的方法:

  • 如果發送的沒有參數名稱你可以直接得到請求體,如
    InputStreaminputStream=urlConnection.getInputStream();
    Stringencoding=urlConnection.getContentEncoding();
    Stringbody=IOUtils.toString(inputStream,encoding);
    System.out.println(body);

  • 如果body就是那個json內容使用fastjson進行解析就可以了
    JSONObjectmap=JSON.parseObject(body);
    System.out.println(map.getString("mobileNo"));//還是System.out.println(map.get("mobileNo"));?具體看一下介面文檔

  • 或者
    Mapmap=JSON.parseObject(body,Map.class);
    System.out.println(map.get("mobileNo"));

⑨ Java web中怎樣取得Android通過post發送的json數據

一. JSON的數據格式 a) 按照最簡單的形式,可以用下面這樣的 JSON 表示名稱/值對: { "firstName": "Brett" } b) 可以創建包含多個名稱/值對的記錄,比如: { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance中國" } c) 可以創建值的數組 { "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance中國" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets中國" } ]} d) 當然,可以使用相同的語法表示多個值(每個值包含多個記錄): { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance中國" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets中國" } ], "authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" } ], "musicians": [ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" } ] } 注意,在不同的主條目(programmers、authors 和 musicians)之間,記錄中實際的名稱/值對可以不一樣。JSON 是完全動態的,允許在 JSON 結構的中間改變表示數據的方式。 二. 在 JavaScript 中使用 JSON JSON 是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數據不需要任何特殊的 API 或工具包。 二.一 將 JSON 數據賦值給變數 例如,可以創建一個新的 JavaScript 變數,然後將 JSON 格式的數據字元串直接賦值給它: var people = { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance中國" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets中國" } ], "authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" } ], "musicians": [ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" } ] } 二.二 訪問數據 將這個數組放進 JavaScript 變數之後,就可以很輕松地訪問它。實際上,只需用點號表示法來表示數組元素。所以,要想訪問 programmers 列表的第一個條目的姓氏,只需在JavaScript 中使用下面這樣的代碼: people.programmers[0].lastName; 注意,數組索引是從零開始的。 二.三 修改 JSON 數據 正如訪問數據,可以按照同樣的方式修改數據: people.musicians[一].lastName = "Rachmaninov"; 二.四 轉換回字元串 a) 在 JavaScript 中這種轉換也很簡單: String newJSONtext = people.toJSONString(); b) 可以將任何 JavaScript 對象轉換為 JSON 文本。並非只能處理原來用 JSON 字元串賦值的變數。為了對名為 myObject 的對象進行轉換,只需執行相同形式的命令: String myObjectInJSON = myObject.toJSONString(); 說明:將轉換回的字元串作為Ajax調用的字元串,完成非同步傳輸。 小結:如果要處理大量 JavaScript 對象,那麼 JSON 幾乎肯定是一個好選擇,這樣就可以輕松地將數據轉換為可以在請求中發送給伺服器端程序的格式。 三. 伺服器端的 JSON 三.一 將 JSON 發給伺服器 a) 通過 GET 以名稱/值對發送 JSON 在 JSON 數據中會有空格和各種字元,Web 瀏覽器往往要嘗試對其繼續編譯。要確保這些字元不會在伺服器上(或者在將數據發送給伺服器的過程中)引起混亂,需要在JavaScript的escape()函數中做如下添加: var url = "organizePeople.php?people=" + escape(people.toJSONString()); request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null); b) 利用 POST 請求發送 JSON 數據 當決定使用 POST 請求將 JSON 數據發送給伺服器時,並不需要對代碼進行大量更改,如下所示: var url = "organizePeople.php?timeStamp=" + new Date().getTime(); request.open("POST", url, true); request.onreadystatechange = updatePage; request.setRequestHeader("Content-Type", "application/x-至美-form-urlencoded"); request.send(people.toJSONString()); 注意:賦值時格式必須是var msg=eval('(' + req.responseText + ')'); 三.二 在伺服器上解釋 JSON a) 處理 JSON 的兩步驟。 針對編寫伺服器端程序所用的語言,找到相應的 JSON 解析器/工具箱/幫助器 API。 使用 JSON 解析器/工具箱/幫助器 API 取得來自客戶機的請求數據並將數據轉變成腳本能理解的東西。 b) 尋找 JSON 解析器 尋找 JSON 解析器或工具箱最好的資源是 JSON 站點。如果使用的是 Java servlet,json.org 上的 org.json 包就是個不錯的選擇。在這種情況下,可以從 JSON Web 站點下載 json.zip 並將其中包含的源文件添加到項目構建目錄。編譯完這些文件後,一切就就緒了。對於所支持的其他語言,同樣可以使用相同的步驟;使用何種語言取決於您對該語言的中國程度,最好使用您所熟悉的語言。 c) 使用 JSON 解析器 一旦獲得了程序可用的資源,剩下的事就是找到合適的方法進行調用。如果在 servlet 中使用的是 org.json 包,則會使用如下代碼: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuffer jb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { //report an error } try { JSONObject jsonObject = new JSONObject(jb.toString()); } catch (ParseException e) { // crash and burn throw new IOException("Error parsing JSON request string"); } // Work with the data using methods like... // int someInt = jsonObject.getInt("intParamName"); // String someString = jsonObject.getString("stringParamName"); // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName"); // JSONArray arr = jsonObject.getJSONArray("arrayParamName"); // etc...

⑩ java-android開發怎麼解析多層json

android中json解析有很多種方式,解析完,直接給TextView賦值即可 以下為android中常見的JSON解析類庫 1. android SDK:androidSDK中自帶的JSONObject 2. gson google專門為androd開發的json解析框架 3.jackson java EE Spring中的json轉換工具 4.json-lib: JSON-lib框架,轉換JSON、XML 在Java EE中使用最廣泛的是Jackson Json,使用非常方便而且效率極高;另外還有兩個比較有名氣的是Gson和JSON-lib,某些大俠已經對它們做了對比實驗,結論如下執行效率:Jackson>Gson>JSON-lib

熱點內容
彈簧自動壓縮 發布:2025-01-07 06:08:35 瀏覽:522
傳奇榮耀腳本 發布:2025-01-07 05:53:14 瀏覽:979
為什麼安卓手機連接不了蘋果耳機 發布:2025-01-07 05:37:49 瀏覽:75
c語言mfc 發布:2025-01-07 05:33:18 瀏覽:592
自己搭建郵件伺服器ddns 發布:2025-01-07 05:19:29 瀏覽:205
光碟機無法訪問指定設備 發布:2025-01-07 05:17:19 瀏覽:104
如何刪除人人網的訪問記錄 發布:2025-01-07 05:02:47 瀏覽:281
清華編譯原理第2版答案pdf 發布:2025-01-07 04:48:03 瀏覽:936
pythonweb框架對比 發布:2025-01-07 04:48:00 瀏覽:606
交叉編譯應用程序示例 發布:2025-01-07 04:47:59 瀏覽:649