GVKun编程网logo

从 json 数组 Nifi(json数组怎么取值)

31

在这里,我们将给大家分享关于从json数组Nifi的知识,让您更了解json数组怎么取值的本质,同时也会涉及到如何更有效地1,Flask-三剑客send_file-jsonify-session、aj

在这里,我们将给大家分享关于从 json 数组 Nifi的知识,让您更了解json数组怎么取值的本质,同时也会涉及到如何更有效地1,Flask-三剑客send_file-jsonify-session、ajax如何传送数组、JSON.parse和JSON.stringify区别、Android-Gson解析JSON数据(JSON对象/JSON数组)、Apache Nifi 如何使用嵌套数组 JSON 加载 JSON 并调用 Oracle 存储过程的内容。

本文目录一览:

从 json 数组 Nifi(json数组怎么取值)

从 json 数组 Nifi(json数组怎么取值)

如何解决从 json 数组 Nifi?

我有以下输入 json,其中包含一个 json 数组:

{
  "ArrayList": [
    {
      "a": "value1","b": "value2","c": "value3"
    },{
      "a": "value4","b": "value5","c": "value6"
    },{
      "a": "value7","b": "value8","c": "value9"
    }
  ]
}

所需的输出是:

{
  "ArrayList": [
    {
      "a": "value1","b": "value2"
    },"b": "value5"
    },"b": "value8"
    }
  ]
}

对此的 Jolt 变换规范表达式是什么?

解决方法

似乎您想删除 ArrayList 数组的对象的属性 c,然后可以使用 remove 转换,例如>

[
  {
    "operation": "remove","spec": {
      "ArrayList": {
        "*": {
          "c": ""
        }
      }
    }
  }
]

1,Flask-三剑客send_file-jsonify-session

1,Flask-三剑客send_file-jsonify-session

flask-三剑客send_file-jsonify-session

 

 

需要导入的模块,

from flask import Flask, redirect, render_template,request,send_file,jsonify,Markup,session

 

 

笔记

2018年11月19日:
    1.Flask 介绍
        Django :
            优点:大    组件全    session    models    
            缺点:所有资源全部加载,造成资源上一定的浪费
        
        Flask :
            优点:小    短小精悍 session 三方组件多太多了
            缺点:稳定性相对而言较差
        
        Tornado:
            优点 :异步 IO 非阻塞 原生Websocket
            
        
    2.利用 Django 学习 Flask
        pip install flask
        
        启动flask:
            from flask import Flask
            app = Flask(__name__)
            app.run()
        
        flask路由:
            @app.route("/home",methods=["GET","POST"])
        
        Response三剑客 + 小儿子:
            return "hello s13 students" # Django HttpResponse 返回字符串
            return render_template("index.html") # 返回模板
            return redirect("/index") # 重定向跳转
            小儿子
            return send_file("2.mp3") # 打开文件并返回客户端
            return jsonify({"name":"yinwangba"}) # 返回标准的json格式字符串 content-type: application/json
            
            
        Request:
            # print(request.form) # form 存放form表单中的序列化数据
            # print(request.args) # args 存放URL中的序列化数据
            # print(request.values) # values 存放URL和form表单中的序列化数据
            # print(request.method) # method 存放请求方式
            # print(request.path) # path 路由地址
            # print(request.url) # url 请求全部地址 http://127.0.0.1:5000/home?id=jwb&username=ywb
            # print(request.host) # host 主机位 127.0.0.1:5000
            # print(request.host_url) # host_url 将主机位转成url http://127.0.0.1:5000/
            # print(request.data) # data 当请求头content-type无法被识别时
            # print(request.json) # json 当请求头content-type:application/json
            # print(request.headers) # headers 查看请求头
            # print(request.files.get("file")) # files 获取文件对象
            # file = request.files.get("file")
            # file.save(file.filename)
        
        Jinja2:
            {{}} 引用变量 非逻辑代码时使用
            {%%} 逻辑代码使用
            | safe 
            Markup : from flask import Markup 后台返回安全标签字符串
            {% block jj2 %}
            {% include "login.html" %}
            
            {% macro func(name,type_name) %}
                <input type="{{ type_name }}" name="{{ name }}">
                <input type="submit" value="提交文件">
            {% endmacro %}
            {{ func("file","file") }}
        
        
        Flask中的Session组件:
            from flask import session
            app.secret_key = "OldBoyEdu.com"
            session被序列化后存放在 浏览器的cookie中
        
        
        特殊装饰器:
            @app.template_global()
            def a_and_b(a,b):
                return a+b

            @app.template_filter()
            def abc(a,b,c):
                return a+b+c
            
        

            
今日总结:
    1.三行MyFlask
        from flask import Flask
        app = Flask(__name__)
        app.run("0.0.0.0",5000,debug=True)
    
    2.Flask中的简单路由
        @app.route("/index",methods=["POST","GET"])
        def index():
            return "Hello"
        
        405
    
    3.Response三剑客 + 小儿子:
        ""                     # HttpResponse
        render_template        # 返回模板 -- 模板目录 templates
        redirect            # 重定向跳转 302 ----- 301
        
        小儿子:
        send_file()            # 打开并返回文件
        jsonify({K:V})        # 返回标准的json格式字符串 content-type:application/json
        
    
    4.Request:
        from flask import request
        request.form # from表单
        request.args # URL传参
        request.json # 存储 content-type:application/json 的数据
        request.data # 存储无法识别的content-type
        
        request.files # 获取客户端发送的文件
        
        request.method # 获取请求方式
        request.path # 路由地址
        request.url # 请求全部地址
        request.host # 请求路径主机位
    
    5.Jinja2:
        from flask import Markup
        Markup # 后端返回的安全标签字符串
        
        {{}} 引用 执行 非逻辑
        {%%} 逻辑代码使用
        
        符合前端Object开发规则
        {%macro func(a,b)%}
            <a href="{{a}}">{{b}}</a>
        {%endmacro%}
    
    6.session
        from flask import session
        app.secret_key = "asdfasdfasdf"
        session["user"] = "123"
        在 flask 中 session序列化后存放在 cookie 中
        
            
今日作业:
    1.准备问题管理
    2.回顾今日知识点
    3.基于session 写一个学生管理 要求3个视图函数被 验证装饰器修饰            
    
            
        
    
笔记

 

 

Django :
    优点:大    组件全    session    models    
    缺点:所有资源全部加载,造成资源上一定的浪费

Flask :
    优点:小    短小精悍 session 三方组件多太多了
    缺点:稳定性相对而言较差

Tornado:
    优点 :异步 IO 非阻塞 原生Websocket

 

 

app=Flask(__name__),找到文件所在的目录,也可以不写__name__换成别的,容易出问题, 

 

三行代码启动flask项目-----右键启动即可

from flask import Flask

app=Flask(__name__) #示例化一个对象,

app.run()

 

启动后,进浏览器所示,

 

 

 

路由

from flask import Flask

app=Flask(__name__) #示例化一个对象,

@app.route(''/'')  #此处代表的是路由,即:浏览器输入http://127.0.0.1:5000/
def index():
    return ''直接就是字符串,''  #此处就相当于HttpResponse

app.run(debug=True) #debug=True,代表自动给重启,

 

 

 需要设置一下,jinjia2的语言,就是为当前的模版配置一个模版语言,

 

 

 render-template的使用,

 

 

//

 

 

 request

 需要引入request,request放在一个容器里,不再跟着走了,需要的时候,去取,

 

 

 

 

@app.route(''/login'')
def login():
    return render_template(''login.html'')


# from flask import request  #需要引入request
@app.route(''/home'',methods=[''POST'',''get'']) #支持大小写,版本问题,之前的版本不支持,也可以是methods=(''post'',)形式
def home():
    username=request.form.get(''username'')#此处的username就是html里面的name值,
    password=request.form.get(''password'')
    if username==''dlh'' and password==''123'':  #如果密码是数字,此处需要写成字符串形式
        return redirect(''/index'')   #301永久重定向,302临时重定向
    else:
        return ''验证错误''


@app.route(''/index'',methods=[''get''])  #此处代表的是路由,即:浏览器输入http://127.0.0.1:5000/
def index():
    print(111)
    return ''跳到了index''

app.run(debug=True) #debug=True,代表自动给重启,

 

 

对于图片的访问,

直接地址栏输入:http://127.0.0.1:5000/static/tl.png,也可以访问,

 

send_file

给前端发过去一个文件,并且打开,

from flask import send_file

@app.route(''/img'')
def img():

    return send_file(''111.mp3'')

 

jsonify的使用

from flask import jsonify

@app.route(''/j'')
def j():
    d={''name'':''hhh''}
    return jsonify(d)

 

 

request.form

request.form,是一个字典,ImmutableMultiDict([(''username'', ''dlh''), (''password'', ''12'')]),可以进行取值,

 

字典的索引取值,[key]取不到值,会报keyerror的错,

dic={''abc'':123,''bca'':321}
# ret=dic[''abd'']                        #KeyError: ''abd''  报错
# ret=dic.get(''abd'')                    # None
ret=dic.get(''abd'',''这就是默认值'')     #取不到值就显示默认值,输出:这就是默认值
print(ret)

 

关于request的一些内容

# from flask import request  #需要引入request
@app.route(''/home'',methods=[''POST'',''get'']) #支持大小写,版本问题,之前的版本不支持,也可以是methods=(''post'',)形式
def home():
    username=request.form.get(''username'')#此处的username就是html里面的name值,
    password=request.form.get(''password'')

    #取的都是序列化后的数据,
    # print(request.form)#是一个字典,ImmutableMultiDict([(''username'', ''dlh''), (''password'', ''12'')]),可以进行取值,
    # print(request.args)#拿到ImmutableMultiDict([(''id'', ''xxx'')]),也就是action="/home?id=xxx"提交的,
    # print(request.values)  #这个方法拿到的是request.form与request.args加起来的结果,CombinedMultiDict([ImmutableMultiDict([(''id'', ''xxx'')]), ImmutableMultiDict([(''username'', ''daad''), (''password'', ''asdaaa'')])])
    # print(request.values.to_dict()) #拿到{''username'': ''daad'', ''password'': ''asdaaadd'', ''id'': ''xxx''},一般不用
    #此处注意一点,如果url上提交的key与input标签里面的name重名了,进行取值的时候,url会覆盖input标签,
    # print(request.method) #输出的是  请求的方式,
    # print(request.path)   #输出的是路由,/home  路由地址,
    # print(request.url)    #输出的是http://127.0.0.1:5000/home?id=xxx   全部地址

    # print(request.host)      #输出:127.0.0.1:5000   主机位
    # print(request.host_url)  #输出:http://127.0.0.1:5000/  主机位进行了转换,

    # print(request.data)    #当请求体content-type无法被识别是,从这里面拿数据
    # print(request.json)  #application/json  flask提供了json字符串接口
    print(request.headers)  # 请求头,Content-Type: application/x-www-form-urlencodedyin

    #<input type="file" name="file">   记得有enctype="multipart/form-data">
    print(request.files)  #输出:ImmutableMultiDict([(''file'', <FileStorage: ''ff.jpg'' (''image/jpeg'')>)]),里面的file,是name起的名字
    #因为拿到的是字典,可以进行取值,
    file=request.files.get(''file'')
    file.save(file.filename) #直接拿到文件,保存在本地
    # file.save(''新名字.jpeg'')  #进还可以重命名后,保存在本地了,

    if username==''dlh'' and password==''123'':  #如果密码是数字,此处需要写成字符串形式
        return redirect(''/index'')
    else:
        return ''验证错误''

 

 

jinjin2

 

for if的使用,

view代码

STUDENT = {''name'': ''Old'', ''age'': 38, ''gender'': ''''}

STUDENT_LIST = [
    {''name'': ''Old'', ''age'': 38, ''gender'': ''''},
    {''name'': ''Boy'', ''age'': 73, ''gender'': ''''},
    {''name'': ''EDU'', ''age'': 84, ''gender'': ''''}
]

STUDENT_DICT = {
    1: {''name'': ''Old'', ''age'': 38, ''gender'': ''''},
    2: {''name'': ''Boy'', ''age'': 73, ''gender'': ''''},
    3: {''name'': ''EDU'', ''age'': 84, ''gender'': ''''},
}


@app.route(''/index'',methods=[''get''])  #此处代表的是路由,即:浏览器输入http://127.0.0.1:5000/
def index():
    return render_template(''index.html'',stu=STUDENT,stu_list=STUDENT_LIST,stu_dic=STUDENT_DICT)
代码

 

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ stu }}
<table border="1px">
   <thead>
        <tr>
            <td>name</td>
            <td>age</td>
            <td>gender</td>
        </tr>
   </thead>
    <tbody>
        <tr>
            <td>{{ stu.name }}</td>
            <td>{{ stu.get(''age'') }}</td>
            <td>{% if stu.gender=='''' %}
                 中老年
                {% else %}
                {{ stu.gender }}
            {% endif %}</td>
        </tr>
    </tbody>
</table>

{{ stu_list }}


<table border="1px">
    {% for dic in stu_list %}
        <tr >
            <td>name</td>
            <td>age</td>
            <td>gender</td>
        </tr>
        <tr>
            <td>{{ dic.name }}</td>
            <td>{{ dic.age }}</td>
            <td>{% if dic.gender=='''' %}
                中老年
                {% else %}
                {{ dic.gender }}
            {% endif %}</td>
        </tr>
    {% endfor %}
</table>
{{ stu_dic }}
<table border="1px">
    {% for k in stu_dic %}
        <tr>
            <td>id</td>
            <td>name</td>
            <td>age</td>
            <td>gender</td>
        </tr>
        <tr>
            <td>{{ k }}</td>
            <td>{{ stu_dic[k].name}}</td>
            <td>{{ stu_dic[k].age}}</td>
            <td>{% if stu_dic[k].gender=='''' %}
                中老年
                {% else %}
                {{ stu_dic.get(k).get(''gender'')}}
            {% endif %}</td>
{#            <td>{{ stu_dic.get(k).get(''gender'')}}</td>#}
        </tr>
    {% endfor %}
</table>

</body>
</html>
html代码

 

 

markup的使用,但是html页面不能老加safe,所以需要使用markup

 

 

 使用markup后的,

 

 

 可以直接传函数进行调用

 

 

改进版

 

 偏函数的讲解,

 

 

 

继承

 

 

 include:把别的文件当成模块加载当前页面

 

 

macro:宏

 

 

 

 session

 

 

 

 

智能玩具项目面试相关问题集锦

1.说说你智能玩具的项目:
目的:关爱留守儿童, 让玩具成为父母间沟通的媒介, 建立沟通的桥梁,让玩具成为孩子的玩伴
实现无屏社交,依靠孩子的语音指令做出响应,例如我要和爸爸聊天,玩具会提示可以和爸爸聊天了并打开与app通讯的链接
我要听世上只有妈妈好,玩具就会依照指令播放相应的内容

2.说说智能玩具有什么功能:
功能: 玩具可以语音点播朗诵诗歌,播放音乐,做游戏-成语接龙,与智能机器人聊天
与手机app 的im通讯 ,手机app可以为玩具点播歌曲,玩具与玩具之间的通讯

3.智能部分使用了什么算法:
两种回答:
1.使用百度ai中的语音合成和语音识别,点播功能是使用Gensim库进行训练的,聊天做游戏是用的图灵机器人+百度语音合成
2.使用百度ai中的语音合成和语音识别 NLP自然语言处理 点播功能基于百度NLP,聊天做游戏是用的图灵机器人+百度语音合成

4.语音IM通讯是怎么实现的:
通过http传输音频文件,将音频文件保存在服务器中,并将聊天信息存储在服务器中
再通过Websocket进行实时通讯,收到消息之后第一时间去服务器中查询聊天信息

5.手机app是怎么做的(使用什么方式):
使用MUI 前端布局
使用HTML5PLUS 完成系统硬件驱动调用 (摄像头,麦克风等) 

6.谈谈你对人工智能的理解(说出人工智能技术的关键字至少5个):
语音类 : 语音识别 语音合成
图像类 : 图像识别 文字识别 人脸识别 视频审核
语言类 : 自然语言处理 机器翻译 词法分析 依存句法分析 文本纠错 对话情绪识别 词向量表示 短文本相似度
词义相似度 情感倾向分析

7.mongodb相关:
1.修改器: $push $set $pull $inc $pop
2.说说你对 $ 的理解 : $ 我的理解就是代指符号,代指所查询到的数据或索引位置
3.Mongodb中的数据类型 : ObjectID String Boolean Integer Double Arrays Object(Dict) Null Timestamp Date
4.mongodb的比较符 : $lt $gt $lte $gte ":"

8.公司组织架构:
1.综合人力财务行政:1个小姐姐
2.营销部:老张
3.产品部:老李 + UI小姐姐
4.软件部:闫帅 + 前端小姐姐 +5.硬件部:江老师

9.项目不做底层,只使用三方的原因:
制作底层大量占用人力,公司资金不足以支撑底层研发
将大量成本投入到硬件研发中

10.百度AI是网络请求,那如果出现延迟,怎么处理:
百度响应默认超时2秒,返回给用户语音识别失败

11.关于用户体验问题:
非极端情况下,用户会在3秒内得到响应的结果



功能实现:
1.基于Websocket实现语音IM通讯
2.基于MUI实现app移动端应用布局
3.基于HTML5PLUS实现移动操作系统的硬件驱动调用及系统调用
4.基于MongoDB实现数据存储
5.基于Redis实现离线消息存储
6.基于BaiduAI开放技术实现语音合成和语音识别
7.基于gensim LSIModel 语言模型实现词语训练
8.基于gensim 稀疏矩阵相似度实现文本相似度匹配
9.基于jieba 实现语音指令分词
10.基于pypinyin 实现中文同音字识别
flask项目笔记

 

 

 

ajax如何传送数组、JSON.parse和JSON.stringify区别

ajax如何传送数组、JSON.parse和JSON.stringify区别

【ajax如何传数组给PHP?有哪些办法?】
首先了解:
data有两种传参类型,一个对象(Object),而是字符串(String)。而对象类型必须是键值对的格式。
基于data只能传送两种类型的数据 (js是这样,jq会把数组转化成string),所以需要一定的方法把数组转化为json格式,如果手动的话是很不现实的,如果这个数组足够大,所以一定会有已经成型的方法实现了这个功能。
当时经过百度后,我认为靠谱的方法。

1.$.toJson(“要转换的数组”)
2.JSON.stringify("要转化的数组")。

现在我把被选中的多选框的value保存在一个数组checked_value[]中,想要把它传给PHP。(不是对象也不是字符串,是单纯的数组)

复制这个数组,接下来让它被转化成【键值对】的Json格式。

因为这个数组jsonstr本身是一个普通数组。
所以在写入ajax的data时,不能直接data:jsonstr,而是要写成data:{jr:jsonstr},

这样才是键值对。默认的键从0开始,值就是原来数组里那些value。
(当时不是太明白,各种测试修改得到的结果)

很啰嗦对不对?

之前写在空间里的时候估计也迷迷糊糊的,现在又重新查了资料又明白了一些。

说一下两个方法原本的用法。
1.JSON.parse(“要转换的数组”)
2.JSON.stringify(“要转化的数组”)。

首先,两个方法的用法是有差别的。
JSON.stringify是从一个对象中解析出字符串
JSON.parse是从一个字符串中解析出json(键值对)。
所以在使用的时候如果参数不对应,就不能正确转换。

具体用法:
JSON.parse:字符串->键值对
var str = ‘{“address”:”明水”,”phone”:”1237828”}’;
JSON.parse(str);

>
address: “明水”
phone: “1237828”

需要注意的是,单引号后花括号。双引号就麻烦了。貌似还要在花括号里面的双引号前面加\,否则算语法错误。

JSON.stringify:对象->字符串

var a = {a:1,b:2}

JSON.stringify(a)

>
“{“a”:1,”b”:2}”

贴一个很强大的解析。
http://www.jb51.net/article/29893.htm

Android-Gson解析JSON数据(JSON对象/JSON数组)

Android-Gson解析JSON数据(JSON对象/JSON数组)

上一篇博客,Android-解析JSON数据(JSON对象/JSON数组),介绍了使用 org.json.JSONArray;/org.json.JSONObject; 来解析JSON数据;

 

Google Android 还提供来另外一种方式来解析JSON数据,那就是Gson;

Gson是非常方便的JSON解析/封装/处理等等,强大的工具类:

  特点:Gson可以把JSON对象数据->转换映射为Bean对象

       Gson可以把JSON数组数据->转换映射为集合

     Gson可以把Bean对象->转换为JSON对象数据

     Gson可以把集合->转换为JSON数组数据

        ........... 

 

首先要在app/build.gradle配置文件中,导入,Gson支持包

// Gson支持包的导入
implementation ''com.google.code.gson:gson:2.6.2''

 


 

需要解析的JSON数据:

/data/data/liudeli.mynetwork01/files/pottingJSON1

{
    "name":"李四",
    "age":99,
    "hobby":"爱好是练习截拳道"
}

 

/data/data/liudeli.mynetwork01/files/pottingJSONArray1

[
    {
        "name":"君君",
        "age":89,
        "sex":"男"
    },
    {
        "name":"小君",
        "age":99,
        "sex":"女"
    },
    {
        "name":"大君",
        "age":88,
        "sex":"男"
    }
]

 

定义一个Bean
定义的name/age/hobby 必须要和JSON数据里面的一模一样 

package liudeli.mynetwork01.entity;

/**
 * 定义一个Bean
 * 定义的name/age/hobby 必须要和JSON数据里面的一模一样
 * {
 *     "name":"李四",
 *     "age":99,
 *     "hobby":"爱好是练习截拳道"
 * }
 */
public class Student2 {

    private String name;
    private int age;
    private String hobby;

    public Student2(String name, int age, String hobby) {
        this.name = name;
        this.age = age;
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=''" + name + ''\'''' +
                ", age=" + age +
                ", hobby=''" + hobby + ''\'''' +
                ''}'';
    }
}

  

定义的name/age/sex 必须要和JSON数据里面的一模一样

package liudeli.mynetwork01.entity;

/**
 * 定义一个Bean
 * 定义的name/age/sex 必须要和JSON数据里面的一模一样
 *
 * [
 *     {
 *         "name":"君君",
 *         "age":89,
 *         "sex":"男"
 *     },
 *     {
 *         "name":"小君",
 *         "age":99,
 *         "sex":"女"
 *     },
 *     {
 *         "name":"大君",
 *         "age":88,
 *         "sex":"男"
 *     }
 * ]
 */
public class Student {

    private String name;
    private int age;
    private String sex;

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=''" + name + ''\'''' +
                ", age=" + age +
                ", sex=''" + sex + ''\'''' +
                ''}'';
    }
}

 

GsonAnalyzeJSONActivity.java

package liudeli.mynetwork01;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;

import liudeli.mynetwork01.entity.Student;
import liudeli.mynetwork01.entity.Student2;

public class GsonAnalyzeJSONActivity extends Activity {

    private final String TAG = GsonAnalyzeJSONActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_gson_analyze);
    }

    /**
     * Gson解析JSON对象
     * {
     *     "name":"李四",
     *     "age":99,
     *     "hobby":"爱好是练习截拳道"
     * }
     */
    public void gonsAnalyzeJSONObject(View view) {
       String jsonData = readFile("pottingJSON1");
       // Log.d(TAG, "jsonData:" + jsonData);

       Gson gson = new Gson();
       Student2 student2 = gson.fromJson(jsonData, Student2.class);
       Log.d(TAG, "gonsAnalyzeJSONObject 解析后的结果:" + student2.toString());
    }

    /**
     * Gson解析JSON数组
     * [
     *     {
     *         "name":"君君",
     *         "age":89,
     *         "sex":"男"
     *     },
     *     {
     *         "name":"小君",
     *         "age":99,
     *         "sex":"女"
     *     },
     *     {
     *         "name":"大君",
     *         "age":88,
     *         "sex":"男"
     *     }
     * ]
     * @param view
     */
    public void gonsAnalyzeJSONArray(View view) {
        String jsonData = readFile("pottingJSONArray1");
        // Log.d(TAG, "jsonData:" + jsonData);

        Gson gson = new Gson();

        /**
         * TypeToken<List<需要映射的Bean对象>>(){}.getType()
         */
        List<Student> list = gson.fromJson(jsonData, new TypeToken<List<Student>>(){}.getType()); // 参数二:需要指定类型,类型来决定解析的集合

        for (Student student: list) {
            Log.d(TAG, "gonsAnalyzeJSONArray 解析后的结果:" + student.toString());
        }

    }

    /**
     * 读取文件里面的字符串
     * @param fileName
     * @return
     */
    private String readFile(String fileName) {
        String result = null;
        try {
            InputStream inputStream = openFileInput(fileName);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            byte[] bytes = new byte[inputStream.available()];

            inputStream.read(bytes);

            baos.write(bytes, 0,bytes.length);

            result = new String(baos.toByteArray());

            baos.close();
            inputStream.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

 

activity_gson_analyze.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gson解析JSON对象"
        android:onClick="gonsAnalyzeJSONObject"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gson解析JSON数组"
        android:onClick="gonsAnalyzeJSONArray"
        />

</LinearLayout>

 

日志的打印:

使用Gson解析,JSON对象数据:

12-23 23:00:52.108 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONObject 解析后的结果:Student{name=''李四'', age=99, hobby=''爱好是练习截拳道''}

 

使用Gson解析,JSON数组数据:

12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''君君'', age=89, sex=''男''}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''小君'', age=99, sex=''女''}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''大君'', age=88, sex=''男''}

 

Apache Nifi 如何使用嵌套数组 JSON 加载 JSON 并调用 Oracle 存储过程

Apache Nifi 如何使用嵌套数组 JSON 加载 JSON 并调用 Oracle 存储过程

如何解决Apache Nifi 如何使用嵌套数组 JSON 加载 JSON 并调用 Oracle 存储过程?

我是 Nifi 的新手,但我有一些 JSON 数据,它是一个数据数组,在每个数组元素中,还有另一个嵌套数组数据。

虽然我能够获取文件以加载 JSON,但我遇到的问题如下:

  • 展平每个数组和嵌套数组 - 包含换行符的嵌套数组存在问题。我已尝试使用处理器将其删除,但未将其删除
  • 提取需要的数据
  • 提取的数据进行组织,可以作为参数传递给 Oracle 存储过程以供执行

我已经使用了 Get File、JoltTransformJson、Executesql、GetAttributes,但我没有看到一个结构,其中对于 JSON 数组中的每个元素和展平嵌套 JSON 的属性列表可以传递给存储过程。

谁能提供任何分步指导?

下面是一封关于 JSON 结构的电子邮件,以提供一个想法-

[ { "app_id":"1","date_time":"2020-11-30T12:21:25.447430","supplier_name":"abc","doc_id":"123345","data":" {\n header {\n l_Id = { 1 2 3 3 4 5 6 11 }\n identifer = 123456789\n country = GB\n commonIdentifier {\n ident {\n opps = 6175\n etni {\n format = 1234567\n }\n }\n commonIdentityId = 0\n }\n sequence = 0\n timeStamp = 20201130002255.0Z\n timeStampQual = timeFound\n }\n data {\n sequence [0] { \n type = type\n contents {\n etni {\n params {\n iD = { 1234567 }\n version = version\n identifier = 1234567\n identifier {\n commonidentityid = 30\n id {\n opps = 6175\n netId {\n 格式 = 12563412\n }\n }\n }\n 时间戳 {\n localTime {\n generaltime = 20201130122255.000Z\n BSWT = notProvided\n }\n }\n direction = forward\n state = nothing\n release = 9\n nature = ball\n }\n }\n }\n }\n } \n}\n",},{ "app_id":"1",} ]

解决方法

有 FlattenJSON Processor 如果您想拆分 JSON,则可以使用 JOLT 和一些网站,例如 JOLT transformation

另一种选择是相应地拆分 JSON 并使用拆分值。我发现网站 https://jsonpath.com/ 有助于决定拆分的工作方式。 我知道这不是一步一步的,但是使用 SplitJSON 处理器,然后可能是 ExtractText 处理器,您将能够获得所需的信息。如果不知道数据的确切格式,以及需要哪些数据部分,就很难一步一步地提供准确的数据。

关于从 json 数组 Nifijson数组怎么取值的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于1,Flask-三剑客send_file-jsonify-session、ajax如何传送数组、JSON.parse和JSON.stringify区别、Android-Gson解析JSON数据(JSON对象/JSON数组)、Apache Nifi 如何使用嵌套数组 JSON 加载 JSON 并调用 Oracle 存储过程的相关信息,请在本站寻找。

本文标签: