如何在 Android 中使用 JAVA 将 JSON 保存在字符串变量中?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20834393/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 04:40:25  来源:igfitidea点击:

How to Save JSON in String variable using JAVA In Android?

javaandroidjsongson

提问by nida

i am newbie in android Here is JSON defined, i need to manually store this JSON in String variable using JAVA in Android.I am getting diffculty to do this.here is the code i have tried but its not correct.

我是 android 新手这里定义了 JSON,我需要在 Android 中使用 JAVA 手动将此 JSON 存储在 String 变量中。我很难做到这一点。这是我尝试过的代码,但它不正确。

 String jsonObject = "{


        {
                      "id": 22,
                      "menu_id": 1,
                      "field_type_id": 1,
                      "c4w_code": "1234",
                      "field_label": "Customer No",
                      "field_values": "",
                      "date_Created": "2012-09-16 05:11:23",
                      "date_modified": "2013-11-20 10:33:23",
                      "is_required": 0,
                      "is_static": 1,
                      "field_order": 1
        },
        {
                      "id": 23,
                      "menu_id": 1,
                      "field_type_id": 1,
                      "c4w_code": "1234",
                      "field_label": "Company Name",
                      "field_values": "",
                      "date_Created": "2012-09-16 05:11:56",
                      "date_modified": "2013-11-20 10:33:23",
                      "is_required": 1,
                      "is_static": 1,
                      "field_order": 3
        }

}";

i need to store it either in String or in JSONObject so that i can move a head to work with this. after adding code :

我需要将它存储在 String 或 JSONObject 中,以便我可以移动头来处理它。添加代码后:

MenuFields menuFieldInstance[];// an array of bean Class
Gson gson = new Gson();
 String jsonObjectString ="{\n\n\n {\n \"id\": 22,\n \"menu_id\": 1,\n \"field_type_id\": 1,\n \"c4w_code\": \"1234\",\n \"field_label\": \"Customer No\",\n \"field_values\": \"\",\n \"date_Created\": \"2012-09-16 05:11:23\",\n \"date_modified\": \"2013-11-20 10:33:23\",\n \"is_required\": 0,\n \"is_static\": 1,\n \"field_order\": 1\n },\n {\n \"id\": 23,\n \"menu_id\": 1,\n \"field_type_id\": 1,\n \"c4w_code\": \"1234\",\n \"field_label\": \"Company Name\",\n \"field_values\": \"\",\n \"date_Created\": \"2012-09-16 05:11:56\",\n \"date_modified\": \"2013-11-20 10:33:23\",\n \"is_required\": 1,\n \"is_static\": 1,\n \"field_order\": 3\n }\n\n}";
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
                menuFieldInstance = gson.fromJson(jsonObjectString,MenuFields[].class);
           for(int i=0;i<jsonObjectString.length();i++)
           {
               Log.i("menuField Instance ",""+menuFieldInstance[i].getId());
           }
        }

i am getting this logCat:

我得到这个 logCat:

12-30 22:56:47.745: E/AndroidRuntime(2238): FATAL EXCEPTION: AsyncTask #3 12-30 22:56:47.745: E/AndroidRuntime(2238): java.lang.RuntimeException: An error occured while executing doInBackground() 12-30 22:56:47.745: E/AndroidRuntime(2238): at android.os.AsyncTask$3.done(AsyncTask.java:299) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 12-30 22:56:47.745: E/AndroidRuntime(2238): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.lang.Thread.run(Thread.java:856) 12-30 22:56:47.745: E/AndroidRuntime(2238): Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:815) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:768) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:717) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:689) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.survey.management.activity.MainActivity$RequestForCustomerMenuFields.getCustomerMenuFieldsData(MainActivity.java:480) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.survey.management.activity.MainActivity$RequestForCustomerMenuFields.doInBackground(MainActivity.java:456) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.survey.management.activity.MainActivity$RequestForCustomerMenuFields.doInBackground(MainActivity.java:1) 12-30 22:56:47.745: E/AndroidRuntime(2238): at android.os.AsyncTask$2.call(AsyncTask.java:287) 12-30 22:56:47.745: E/AndroidRuntime(2238): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 12-30 22:56:47.745: E/AndroidRuntime(2238): ... 5 more 12-30 22:56:47.745: E/AndroidRuntime(2238): Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:803) 12-30 22:56:47.745: E/AndroidRuntime(2238): ... 13 more

12-30 22:56:47.745: E/AndroidRuntime(2238): 致命异常: AsyncTask #3 12-30 22:56:47.745: E/AndroidRuntime(2238): java.lang.RuntimeException: 执行 doInBackground 时出错() 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 android.os.AsyncTask$3.done(AsyncTask.java:299) 12-30 22:56:47.745: E/AndroidRuntime(2238):在 java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 java.util.concurrent.FutureTask.setException(FutureTask.java: 124) 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 12-30 22:56:47.745: E/AndroidRuntime( 2238):在 java.util.concurrent.FutureTask.run(FutureTask.java:137) 12-30 22:56:47.745:E/AndroidRuntime(2238):在 android.os。AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 12-30 22 :56:47.745: E/AndroidRuntime(2238): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 java. lang.Thread.run(Thread.java:856) 12-30 22:56:47.745: E/AndroidRuntime(2238): 由: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期为 BEGIN_ARRAY 但为 BEGIN_OBJECT在第 1 行第 2 列 12-30 22:56:47.745:E/AndroidRuntime(2238):在 com.google.gson.Gson.fromJson(Gson.java:815) 12-30 22:56:47.745:E/AndroidRuntime (2238):在 com.google.gson.Gson.fromJson(Gson.java:768) 12-30 22:56:47.745:E/AndroidRuntime(2238):在 com.google。gson.Gson.fromJson(Gson.java:717) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:689) 12-30 22: 56:47.745: E/AndroidRuntime(2238): 在 com.survey.management.activity.MainActivity$RequestForCustomerMenuFields.getCustomerMenuFieldsData(MainActivity.java:480) 12-30 22:56:47.745: E/AndroidRuntime(2238): 在.survey.management.activity.MainActivity$RequestForCustomerMenuFields.doInBackground(MainActivity.java:456) 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 com.survey.management.activity.MainActivity$RequestForCustomerMenuFields.doInBackground( MainActivity.java:1) 12-30 22:56:47.745: E/AndroidRuntime(2238): at android.os.AsyncTask$2.call(AsyncTask.java:287) 12-30 22:56:47.745: E/AndroidRuntime (2238): 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 12-30 22:56:47.745: E/AndroidRuntime(2238): ... 5 更多 12-30 22:56:47.745: E/AndroidRuntime(2238): 由: java.lang.IllegalStateException: 预期的 BEGIN_ARRAY但在第 1 行第 2 列 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338) 12-30 22:56: 47.745: E/AndroidRuntime(2238): 在 com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70) 12-30 22:56:47.745: E/AndroidRuntime(2238): 在 com.google .gson.Gson.fromJson(Gson.java:803) 12-30 22:56:47.745: E/AndroidRuntime(2238): ... 13 更多E/AndroidRuntime(2238):在 com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338) 12-30 22:56:47.745:E/AndroidRuntime(2238):在 com.google.gson.internal .bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:803) 12-30 22 :56:47.745: E/AndroidRuntime(2238): ... 13 更多E/AndroidRuntime(2238):在 com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338) 12-30 22:56:47.745:E/AndroidRuntime(2238):在 com.google.gson.internal .bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70) 12-30 22:56:47.745: E/AndroidRuntime(2238): at com.google.gson.Gson.fromJson(Gson.java:803) 12-30 22 :56:47.745: E/AndroidRuntime(2238): ... 13 更多

采纳答案by Kailash Dabhi

You need to replace all your (double quotes) " to \"to compile the String object in java.

您需要替换所有(双引号)" to \"以在 java 中编译 String 对象。

Use the below string:

使用以下字符串:

String jsonObject ="{\n\n\n {\n \"id\": 22,\n\"menu_id\": 1,\n \"field_type_id\": 1,\n\"c4w_code\": \"1234\",\n\"field_label\": \"Customer No\",\n\"field_values\": \"\",\n\"date_Created\": \"2012-09-16 05:11:23\",\n\"date_modified\": \"2013-11-20 10:33:23\",\n\"is_required\":0,\n\"is_static\": 1,\n\"field_order\": 1\n},\n{\n\"id\":23,\n\"menu_id\": 1,\n\"field_type_id\": 1,\n\"c4w_code\": \"1234\",\n\"field_label\": \"Company Name\",\n\"field_values\": \"\",\n\"date_Created\": \"2012-09-16 05:11:56\",\n\"date_modified\": \"2013-11-20 10:33:23\",\n\"is_required\": 1,\n\"is_static\": 1,\n\"field_order\": 3\n}\n\n}";

回答by Adhikari Bishwash

replace all your doublequote (") with (\") and it will work.

用 (\") 替换所有的双引号 (") 它将起作用。

回答by ABHISHEK BHARDWAJ

Worked like a charm!!!

像魅力一样工作!!!

String jsonObject="{   {\"Filter\": \"No\",\"Data Type\": \"Aggregated\", \"Key-Fields\": \"Application IP, Client IP, Protocol, Application Port, Client Port\",\"Metric-fields\": \"Bandwidth, Packets\", \"Filter\":\"Enable\"   } }";