安卓json数据保存到assets

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓json数据保存到assets相关的知识,希望对你有一定的参考价值。

参考技术A 新建assets文件夹,并将json文件复制到此文件夹中

在main文件夹下新建assets文件,然后再assets文件中新建namelist.json文件夹,将json数据复制到test.json文件中。

2、访问json文件

try

AssetManager assetManager = getAssets(); // 获得assets资源管理器(assets中的文件无法直接访问,可以使用AssetManager访问)

InputStreamReader inputStreamReader = new InputStreamReader(assetManager.open("namelist.json"),"UTF-8"); // 使用IO流读取json文件内容

BufferedReader br = new BufferedReader(inputStreamReader);

String line;

StringBuilder builder = new StringBuilder();

while ((line = br.readLine())!=null)

builder.append(line);



br.close();

inputStreamReader.close();

JSONObject testJson = new JSONObject(builder.toString()); // 从builder中读取了json中的数据。

// 直接传入JSONObject来构造一个实例

JSONArray array = testJson.getJSONArray("nameList");

Log.e("nameList",array.toString());

for (int i = 0;i

strings[i] = array.getString(i);



catch (IOException e)

e.printStackTrace();

catch (JSONException e)

不将 Json 数据保存到文件中

【中文标题】不将 Json 数据保存到文件中【英文标题】:Not saving Json data to file 【发布时间】:2021-05-05 01:27:40 【问题描述】:

我正在抓取一个页面,并收集一些信息以保存在一个文件中,然后使用 npm 中一个名为“write-json”的库写入 json 中的文件。

但是我遇到了一些问题,我无法保存文件中的所有数据,它会在某个点停止,我正在发送的数据示例:

数据:

  
      'Sat, 31 de January de 2021': [
        PM: 
          '1': '7498-25',
          '2': '2991-23',
          '3': '8552-13',
          '4': '6850-13',
          '5': '6438-10',
          '6': '2329-8',
          '7': '426-7'
        ,
        PT: 
          '1': '5767-17',
          '2': '2282-21',
          '3': '5051-13',
          '4': '0646-12',
          '5': '0133-9',
          '6': '3879-20',
          '7': '160-15'
        ,
        PV: 
          '1': '8888-22',
          '2': '6620-5',
          '3': '3566-17',
          '4': '9635-9',
          '5': '0679-20',
          '6': '9388-22',
          '7': '838-10'
        
      ],
      'Sat, 30 de January de 2021': [
        FD: 
          '1': '7619-5',
          '2': '1445-12',
          '3': '1193-24',
          '4': '6477-20',
          '5': '6819-5',
          '6': '3553-14',
          '7': '409-3'
        ,
        CR: 
          '1': '7911-3',
          '2': '6040-10',
          '3': '2143-11',
          '4': '1706-2',
          '5': '0251-13',
          '6': '8051-13',
          '7': '782-21'
        ,
        PTN: 
          '1': '0594-24',
          '2': '7823-6',
          '3': '4314-4',
          '4': '6884-21',
          '5': '6124-6',
          '6': '5739-10',
          '7': '646-12'
        
      ]
      
    

文件中保存的是:


  "Sat, 31 de January de 2021": [],
  "Sat, 30 de January de 2021": []

这里是我的代码示例:

var jsonfile = [];
    var $ = cheerio.load(body);

                var results =  $('table');

                var banc_results = [];

                var finalResult = ;


                results.each(function( index, element ) 

                var data = $(this).find( "caption" ).text().trim();



                    var thead = $(this).find( "thead > tr > th" );

                    thead.each(function(index, element)
                       var banc = $(this).text();

                       if(banc != "")
                           banc_results[banca] = ;
                       
                    );

                    $(this).find('tbody tr').each(function (i, el) 
                        var $tds = $(this).find('td')
                        var counter = i +1;
                        $tds.each(function(index, element)

                            var $th = $(this).closest('table').find('th').eq($(this).index());

                            if($th.text() != "")
                                banc_results[$th.text()][counter] = $(this).text();
                            

                        );

                    );



                    finalResult[data].dados = banc_results;

                );


                jsonfile = finalResult;
                console.log(jsonfile);
                
                 writeJson.sync('de-data.json', jsonfile);

【问题讨论】:

【参考方案1】:

您尝试保存的数据不是合法的 JSON 对象。 在第一种方法中,您应该在数组中包含括号,例如,第一个日期第一个元素:


   PM: 
        '1': '7498-25',
        '2': '2991-23',
        '3': '8552-13',
        '4': '6850-13',
        '5': '6438-10',
        '6': '2329-8',
        '7': '426-7'
      
,

其他元素依此类推。 抱歉,我在您的代码中找不到如何更正此问题。

【讨论】:

唯一的问题是我使用了一个动态属性 finalResult[data].dados = banc_results。我如何使用它的数据(日期)作为键?【参考方案2】:

如前所述,您没有使用有效的 JSON 语法。正确的应该是这样的:


   "Sat, 31 de January de 2021":
      "PM":
         "1":"7498-25",
         "2":"2991-23",
         "3":"8552-13",
         "4":"6850-13",
         "5":"6438-10",
         "6":"2329-8",
         "7":"426-7"
      
   

因此,不要为 banc_results 创建一个数组,而是创建一个对象

【讨论】:

【参考方案3】:

您正在使用数组表示法 ([...]) 作为对象(命名键值对)。

Array 用于不带名称的元素列表,而Object 将名称分配给值。

对于您使用[ "name": "value" ] 的所有区域,将其更改为 "name": "value"

【讨论】:

唯一的问题是我使用了一个动态属性 finalResult[data].dados = banc_results; 我如何使用数据(日期)作为键? @Pedro 您可以访问对象中的命名属性,foo[n] 表示法可以访问数组的元素对象的属性。 (实际上,数组不就是带有数字键的花哨对象吗?) 但例如我正在创建一个对象 var position = 1: $(this).text();,其中 1 是一个名为 counter 的变量,但在使用变量作为键时不起作用我应该怎么放?我的例子: var position = counter: $(this).text(); finalResult[数据].push(位置); 如果我火了,我应该放 var position = [counter]: $(this).text();

以上是关于安卓json数据保存到assets的主要内容,如果未能解决你的问题,请参考以下文章

安卓app开发笔记

android 如何获取保存的图片的地址 并存到数据库中

安卓数据项目

JSON数据与Python列表,字典

安卓传图片到java端怎么接收接收

安卓和iOS跨平台保存数据