如何读取json字符串中的数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何读取json字符串中的数组相关的知识,希望对你有一定的参考价值。

json来做吧,先去下载下jar包。下面是测试的代码:

try   
    String str = "'list':['1,2','3,4','5,6']";
    JSONObject jsonObject = JSONObject.fromObject(str);  //吧转为json对象
    String array= jsonObject.getString("list"); //获取list的值
    JSONArray jsonArray = JSONArray.fromObject(array); //吧list的值转为json数组对象
    Object[] strs = jsonArray.toArray(); //json转为数组
    for(Object s:strs)
        System.out.println(s);
    
catch(Exception e)e.printStackTrace();

参考技术A

json来做吧,先去下载下jar包。

下面是测试的代码:
try
String str = "'list':['1,2','3,4','5,6']";
JSONObject jsonObject = JSONObject.fromObject(str);  //把转为json对象。
String array= jsonObject.getString("list"); //获取list的值。
JSONArray jsonArray = JSONArray.fromObject(array); //把list的值转为json数组对象。
Object[] strs = jsonArray.toArray(); //json转为数组。
for(Object s:strs)
System.out.println(s);

catch(Exception e)e.printStackTrace();

字符串:
字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似 字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[0]=“a”,s[9]="j",而字符串的 零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入 数组。

参考技术B

json来做吧,先去下载下jar包。下面是测试的代码:
try   
    String str = "\'list\':[\'1,2\',\'3,4\',\'5,6\']";
    JSONObject jsonObject = JSONObject.fromObject(str);  //吧转为json对象
    String array= jsonObject.getString("list"); //获取list的值
    JSONArray jsonArray = JSONArray.fromObject(array); //吧list的值转为json数组对象
    Object[] strs = jsonArray.toArray(); //json转为数组
    for(Object s:strs)
        System.out.println(s);
    
catch(Exception e)e.printStackTrace();

参考技术C

可以试下alibaba的fastjson.

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;

/**
 * @author foresee
 *
 */
@Slf4j
public class JSONTest 

@Test
public void test() 
String jsonStr = "\\"flag\\":\\"sucess\\",\\"cost\\":\\"[100, 200, 312]\\"";
JSONObject json = JSONObject.parseObject(jsonStr);
List<String> costs = JSON.parseArray(json.getString("cost"), String.class);
for (String cost : costs) 
log.debug(cost);


如何从 csv 文件中的一行读取 JSON 字符串?

【中文标题】如何从 csv 文件中的一行读取 JSON 字符串?【英文标题】:How to read JSON string from a line in csv file? 【发布时间】:2019-08-14 19:42:34 【问题描述】:

我是 MapReduce 和 MRjob 的新手,我正在尝试读取我想在 python 中使用 MRjob 处理的 csv 文件。但它有大约 5 列 JSON 字符串(例如 )或 JSON 字符串数组(例如 [,]),其中一些是嵌套的。

到目前为止,我的映射器如下所示:

from mrjob.job import MRJob
import csv
from io import StringIO

class MRWordCount(MRJob):
    def mapper(self, _, line):
        l = StringIO(line)
        reader = csv.reader(l) # returns a generator.

        for cols in reader:
            columns = cols

        yield None, columns

我得到了错误 -

_csv.Error: 字段大于字段限制 (131072)

但这似乎发生了,因为我的代码也将 JSON 字符串分成单独的列(因为里面有逗号)。

如何做到这一点,以便 JSON 字符串不被拆分?也许我忽略了什么?

或者,我有没有其他方法可以使用 MRjob 读取此文件,从而使此过程更简单或更清晰?

【问题讨论】:

如何将您的 csv 文件转换为 psv 文件? @Evhz 你能详细说明一下吗? 替换 csv 文件中的逗号,除非这些逗号在 json   分隔符内,通过管道 | 字符。然后您可以使用load_csv(sep='|') 之类的符号来加载您的内容。 【参考方案1】:

您的 JSON 字符串没有被引号字符包围,因此该字段中的每个逗号都会使 csv 引擎认为它是一个新列。 看看here你要找的是quotechar改变你的数据,让你的json被一个特殊字符包围(默认是")并相应地调整你的csv阅读器

【讨论】:

刚刚取了一个数据样本,在记事本中看到了,JSON 字符串用双引号 (" ) 括起来。 " 不出现在 json 里面? 在某些情况下他们不会,像这样 "['index': '4', 'value': 'EMEA']" 但在某些情况下他们会这样做,像这样 """ browser"": ""Firefox"", ""browserVersion"": ""在演示数据集中不可用"", ""deviceCategory"": ""desktop""" 有趣,应该可以正确解析。尝试在您的csv.reader 中添加quotechar = '"',也许您的默认设置有所不同 在某些情况下他们不会,像这样 "['index': '4', 'value': 'EMEA']" 但在某些情况下他们会这样做,像这样 """ browser"": ""Firefox"", ""browserVersion"": ""在演示数据集中不可用"", ""deviceCategory"": ""desktop"""

以上是关于如何读取json字符串中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 数组解析为字符串? [复制]

无法从 asp dot net 3.1 中的 appsettings.json 读取字符串数组

如何在 appSettings.json 中硬编码和读取字符串数组?

从 $_POST 中的 json 读取关联数组

解析从 c# 返回的 json 字符串数组

PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?