繁体   English   中英

如何在Android中使用JAVA在String变量中保存JSON?

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

我是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
        }

}";

我需要将其存储在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());
           }
        }

我正在获取此logCat:

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):at 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,但在第1行第2列为BEGIN_OBJECT 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):at com.google.gson.Gson.fromJson(Gson.java:717)12 -30 22:56:47.745:E / AndroidRuntime(2238):在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):位于com.survey.management.activity.MainAc tivity $ 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):位于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列为BEGIN_OBJECT 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 / Andro idRuntime(2238):...还有13个

您需要将所有(双引号) " to \\"替换" to \\"以在Java中编译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}";

像魅力一样工作!!!

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

将所有双引号(“)替换为(\\”),它将起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM