如何读取json字符串中的数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何读取json字符串中的数组相关的知识,希望对你有一定的参考价值。
json来做吧,先去下载下jar包。下面是测试的代码:
tryString 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没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入 数组。
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();
可以试下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字符串中的数组的主要内容,如果未能解决你的问题,请参考以下文章
无法从 asp dot net 3.1 中的 appsettings.json 读取字符串数组