In [1]:
class Doc:
print("hello", end=' ')
def test_doc(h: Doc=None) -> None:
'''world'''
print(test_doc.__doc__)
test_doc()
hello world
In [43]:
NotImplemented, __debug__, Ellipsis, ...
Out[43]:
(NotImplemented, True, Ellipsis, Ellipsis)
In [44]:
lists = [[]] * 3
print(lists)
lists[0].append(3)
print(lists, lists[0] is lists[1])
lists[0][0] = 5
print(lists, lists[0] is lists[1])
[[], [], []] [[3], [3], [3]] True [[5], [5], [5]] True
In [45]:
a_tuple = (['foo'], 'bar')
a_tuple[0].append('item')
In [46]:
import re
re.match(r"(?P<name>\w+) .*(\w(?P=name))", "lds daslds").groups()
Out[46]:
('lds', 'slds')
In [49]:
lists = [[] for i in range(3)]
print(lists)
lists[0].append(3)
lists, lists[0] is lists[1]
[[], [], []]
Out[49]:
([[3], [], []], False)
In [50]:
n = -65
bin(n), n.bit_length(), int.from_bytes(b"\x00\x34", "big", signed=False)
Out[50]:
('-0b1000001', 7, 52)
package com.lds.learn;
/**
* TODO
*
* @author Liang Desheng
* @version 1.0
* @date 2022/11/5 14:06
**/
public class ClassLearn {
@Deprecated
private int num = 1;
public int add() {
int incr = 1;
return num + incr;
}
}
In [5]:
# 字节码文件
cf = b'\xca\xfe\xba\xbe\x00\x00\x004\x00\x1a\n\x00\x04\x00\x16\t\x00\x03\x00\x17\x07\x00\x18\x07\x00\x19\x01\x00\x03num\x01\x00\x01I\x01\x00\nDeprecated\x01\x00\x19RuntimeVisibleAnnotations\x01\x00\x16Ljava/lang/Deprecated;\x01\x00\x06<init>\x01\x00\x03()V\x01\x00\x04Code\x01\x00\x0fLineNumberTable\x01\x00\x12LocalVariableTable\x01\x00\x04this\x01\x00\x1aLcom/lds/learn/ClassLearn;\x01\x00\x03add\x01\x00\x03()I\x01\x00\x04incr\x01\x00\nSourceFile\x01\x00\x0fClassLearn.java\x0c\x00\n\x00\x0b\x0c\x00\x05\x00\x06\x01\x00\x18com/lds/learn/ClassLearn\x01\x00\x10java/lang/Object\x00!\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x05\x00\x06\x00\x02\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x01\x00\t\x00\x00\x00\x02\x00\x01\x00\n\x00\x0b\x00\x01\x00\x0c\x00\x00\x008\x00\x02\x00\x01\x00\x00\x00\n*\xb7\x00\x01*\x04\xb5\x00\x02\xb1\x00\x00\x00\x02\x00\r\x00\x00\x00\n\x00\x02\x00\x00\x00\n\x00\x04\x00\x0b\x00\x0e\x00\x00\x00\x0c\x00\x01\x00\x00\x00\n\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x11\x00\x12\x00\x01\x00\x0c\x00\x00\x00A\x00\x02\x00\x02\x00\x00\x00\t\x04<*\xb4\x00\x02\x1b`\xac\x00\x00\x00\x02\x00\r\x00\x00\x00\n\x00\x02\x00\x00\x00\x0f\x00\x02\x00\x10\x00\x0e\x00\x00\x00\x16\x00\x02\x00\x00\x00\t\x00\x0f\x00\x10\x00\x00\x00\x02\x00\x07\x00\x13\x00\x06\x00\x01\x00\x01\x00\x14\x00\x00\x00\x02\x00\x15'
In [6]:
from typing import Any, Union
import struct
from enum import Enum
class RTEnum(Enum):
int_ = 'int'
str_ = 'str'
bytes_ = 'bytes'
class Resolver(dict):
def __getattr__(self, __name: str) -> Any:
return self[__name]
def __setattr__(self, __name: str, __value: Any) -> None:
self[__name] = __value
def __init__(self, cf: Union[bytes, bytearray, str]) -> None:
if isinstance(cf, str):
with open(cf, "rb") as frd:
cf = frd.read()
self.cf = cf
self.offset = 0
self.max_len = len(cf)
def next(self, n: Union[int, str], rtype: RTEnum) -> bytes:
if not isinstance(n, (int, str)):
raise ValueError(f"invalid type: {type(n)}")
n = n if isinstance(n, int) else int(n.replace("u", ''))
if self.offset + n <= self.max_len:
res = self.cf[self.offset: self.offset + n]
self.offset += n
if rtype == RTEnum.str_:
return self.offset-n, str(res).replace("b'", "").replace(r"\x", "").replace("'", "")
elif rtype == RTEnum.int_:
integer = None
if n == 2:
integer = int(struct.unpack('>h', res)[0])
elif n == 4:
integer = int(struct.unpack('>i', res)[0])
elif n == 1:
integer = int(struct.unpack('>B', res)[0])
assert integer is not None, "不能转为integer 或者 未接入"
return self.offset-n, integer
elif rtype == RTEnum.bytes_:
return self.offset-n, res
raise RuntimeError(f"未知的类型:{rtype}")
raise ValueError(f"当前offset: {self.offset}, max_len: {self.max_len},剩下的数据不足{n}!")
def back(self, n: int):
assert n > 0
self.offset = max(0, self.offset - n)
def reset(self):
self.offset = 0
print("reset offset!")
def seek(self, n: int):
if 0 < n < self.max_len:
self.offset = n
print(f"set offset to {n}!")
else:
raise ValueError(f"{n} not int range({0}, {self.max_len})")
def __repr__(self) -> str:
return super().__repr__()
__str__ = __repr__
# resolver = Resolver("ClassLearn.class")
resolver = Resolver(cf)
2. 解析, classFormat¶
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
2.1 magic¶
In [53]:
resolver.reset()
resolver.magic_number = resolver.magic = resolver.next('u4', RTEnum.str_)
print(resolver.magic)
reset offset! (0, 'cafebabe')
2.2 minor_version¶
In [54]:
resolver.minor_version = resolver.next('u2', RTEnum.int_)
print(resolver.minor_version)
(4, 0)
In [55]:
resolver.major_version = resolver.next('u2', RTEnum.int_)
print(resolver.major_version)
(6, 52)
2.3 constant_pool_count¶
In [56]:
resolver.constant_pool_count = resolver.next('u2', RTEnum.int_)
print(resolver.constant_pool_count)
(8, 26)
In [57]:
resolver.constant_pool = [None]
2.4 constant_pool[constant_pool_count-1];¶
常量池是一个结构表,,表示 ClassFile 以及其子结构 所引用的字符串常量, 类或接口名, 字段名以及其他常量。
每一个常量池表条目的格式由第一个 'tag' 字节指示。
常量池表的索引范围是 [1, constant_pool_count - 1]
所有条目都有以下常规格式:
cp_info {
u1 tag;
u1 info[];
}
Constant Type | TagValue |
---|---|
CONSTANT_Class |
7 |
CONSTANT_Fieldref |
9 |
CONSTANT_Methodref |
10 |
CONSTANT_InterfaceMethodref |
11 |
CONSTANT_String |
8 |
CONSTANT_Integer |
3 |
CONSTANT_Float |
4 |
CONSTANT_Long |
5 |
CONSTANT_Double |
6 |
CONSTANT_NameAndType |
12 |
CONSTANT_Utf8 |
1 |
CONSTANT_MethodHandle |
15 |
CONSTANT_MethodType |
16 |
CONSTANT_InvokeDynamic |
18 |
In [58]:
def check_tag(tag, require_tag):
assert tag == require_tag, f"tag is {tag}, but require tag == {require_tag}"
def get_tag(resolver: Resolver) -> int:
resolver.back(1)
return resolver.next(1, RTEnum.int_)[-1]
def do_CONSTANT_Class_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 7)
resolver.constant_pool.append({
"tag": "CONSTANT_Class_info",
"name_index": resolver.next(2, RTEnum.int_),
})
# region
def do_CONSTANT_Fieldref_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 9)
resolver.constant_pool.append({
"tag": "CONSTANT_Fieldref_info",
"class_index": resolver.next(2, RTEnum.int_),
"name_and_type_index": resolver.next(2, RTEnum.int_),
})
def do_CONSTANT_Methodref_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 10)
resolver.constant_pool.append({
"tag": "CONSTANT_Methodref_info",
"class_index": resolver.next(2, RTEnum.int_),
"name_and_type_index": resolver.next(2, RTEnum.int_),
})
def do_CONSTANT_InterfaceMethodref_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 11)
resolver.constant_pool.append({
"tag": "CONSTANT_InterfaceMethodref_info",
"class_index": resolver.next(2, RTEnum.int_),
"name_and_type_index": resolver.next(2, RTEnum.int_),
})
# endregion
def do_CONSTANT_String_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 8)
resolver.constant_pool.append({
"tag": "CONSTANT_String_info",
"string_index": resolver.next(2, RTEnum.int_),
})
# region
def do_CONSTANT_Integer_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 3)
resolver.constant_pool.append({
"tag": "CONSTANT_Integer_info",
"bytes": resolver.next(4, RTEnum.bytes_),
})
def do_CONSTANT_Float_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 4)
resolver.constant_pool.append({
"tag": "CONSTANT_Float_info",
"bytes": resolver.next(4, RTEnum.bytes_),
})
# endregion
# region
def do_CONSTANT_Long_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 5)
resolver.constant_pool.append({
"tag": "CONSTANT_Long_info",
"high_bytes": resolver.next(4, RTEnum.bytes_),
"low_bytes": resolver.next(4, RTEnum.bytes_),
})
def do_CONSTANT_Double_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 6)
resolver.constant_pool.append({
"tag": "CONSTANT_Double_info",
"high_bytes": resolver.next(4, RTEnum.bytes_),
"low_bytes": resolver.next(4, RTEnum.bytes_),
})
# endregion
def do_CONSTANT_NameAndType_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 12)
resolver.constant_pool.append({
"tag": "CONSTANT_NameAndType_info",
"name_index": resolver.next(2, RTEnum.int_),
"descriptor_index": resolver.next(2, RTEnum.int_),
})
def do_CONSTANT_Utf8_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 1)
length = resolver.next(2, RTEnum.int_)
resolver.constant_pool.append({
"tag": "CONSTANT_Utf8_info",
"length": length,
"bytes[length]": resolver.next(length[-1], RTEnum.bytes_),
})
def do_CONSTANT_MethodHandle_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 15)
resolver.constant_pool.append({
"tag": "CONSTANT_MethodHandle_info",
"reference_kind": resolver.next(1, RTEnum.int_),
"reference_index": resolver.next(2, RTEnum.int_),
})
def do_CONSTANT_MethodType_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 16)
resolver.constant_pool.append({
"tag": "CONSTANT_MethodType_info",
"descriptor_index": resolver.next(2, RTEnum.int_),
})
def do_CONSTANT_InvokeDynamic_info(resolver: Resolver) -> None:
tag = get_tag(resolver)
check_tag(tag, 18)
resolver.constant_pool.append({
"tag": "CONSTANT_InvokeDynamic_info",
"bootstrap_method_attr_index": resolver.next(2, RTEnum.int_),
"name_and_type_index": resolver.next(2, RTEnum.int_),
})
In [59]:
CONSTANT_POOL_TAGS_TO_HANDLER = {
7: do_CONSTANT_Class_info,
9: do_CONSTANT_Fieldref_info,
10: do_CONSTANT_Methodref_info,
11: do_CONSTANT_InterfaceMethodref_info,
8: do_CONSTANT_String_info,
3: do_CONSTANT_Integer_info,
4: do_CONSTANT_Float_info,
5: do_CONSTANT_Long_info,
6: do_CONSTANT_Double_info,
12: do_CONSTANT_NameAndType_info,
1: do_CONSTANT_Utf8_info,
15: do_CONSTANT_MethodHandle_info,
16: do_CONSTANT_MethodType_info,
18: do_CONSTANT_InvokeDynamic_info,
}
In [60]:
for ind in range(1, resolver.constant_pool_count[-1]):
tag = resolver.next(1, RTEnum.int_)[-1]
print(">> ", tag, CONSTANT_POOL_TAGS_TO_HANDLER[tag].__name__)
CONSTANT_POOL_TAGS_TO_HANDLER[tag](resolver)
>> 10 do_CONSTANT_Methodref_info >> 9 do_CONSTANT_Fieldref_info >> 7 do_CONSTANT_Class_info >> 7 do_CONSTANT_Class_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info >> 12 do_CONSTANT_NameAndType_info >> 12 do_CONSTANT_NameAndType_info >> 1 do_CONSTANT_Utf8_info >> 1 do_CONSTANT_Utf8_info
2.5 access_flags;¶
Flag Name | Value | Interpretation |
---|---|---|
ACC_PUBLIC |
0x0001 | Declared public ; may be accessed from outside its
package.
|
ACC_FINAL |
0x0010 | Declared final ; no subclasses allowed.
|
ACC_SUPER |
0x0020 | Treat superclass methods specially when invoked by the invokespecial instruction. |
ACC_INTERFACE |
0x0200 | Is an interface, not a class. |
ACC_ABSTRACT |
0x0400 | Declared abstract ; must not be
instantiated.
|
ACC_SYNTHETIC |
0x1000 | Declared synthetic; not present in the source code. |
ACC_ANNOTATION |
0x2000 | Declared as an annotation type. |
ACC_ENUM |
0x4000 | Declared as an enum type.
|
In [ ]:
import json
from json.encoder import JSONEncoder
class CustEncoder(JSONEncoder):
def default(self, o):
if isinstance(o, (bytes, bytearray)):
return str(o)
else:
return super().default(o)
print(json.dumps(resolver, indent=4, cls=CustEncoder))
In [62]:
from bs4 import BeautifulSoup
from collections import namedtuple
import re
import pandas as pd
AcsFlag = namedtuple("AccessFlag", ["flag_name", "value", "iterpretation"])
ALL_ACCESS_FLAGS: dict = {}
In [63]:
data = """
<table summary="Class access and property modifiers" border="1">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th>Flag Name</th>
<th>Value</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="literal">ACC_PUBLIC</code></td>
<td>0x0001</td>
<td>Declared <code class="literal">public</code>; may be accessed from outside its
package.
</td>
</tr>
<tr>
<td><code class="literal">ACC_FINAL</code></td>
<td>0x0010</td>
<td>Declared <code class="literal">final</code>; no subclasses allowed.
</td>
</tr>
<tr>
<td><code class="literal">ACC_SUPER</code></td>
<td>0x0020</td>
<td>Treat superclass methods specially when invoked
by the <span class="emphasis"><em>invokespecial</em></span> instruction.
</td>
</tr>
<tr>
<td><code class="literal">ACC_INTERFACE</code></td>
<td>0x0200</td>
<td>Is an interface, not a class.</td>
</tr>
<tr>
<td><code class="literal">ACC_ABSTRACT</code></td>
<td>0x0400</td>
<td>Declared <code class="literal">abstract</code>; must not be
instantiated.
</td>
</tr>
<tr>
<td><code class="literal">ACC_SYNTHETIC</code></td>
<td>0x1000</td>
<td>Declared synthetic; not present in the source
code.
</td>
</tr>
<tr>
<td><code class="literal">ACC_ANNOTATION</code></td>
<td>0x2000</td>
<td>Declared as an annotation type.</td>
</tr>
<tr>
<td><code class="literal">ACC_ENUM</code></td>
<td>0x4000</td>
<td>Declared as an <code class="literal">enum</code> type.
</td>
</tr>
</tbody>
</table>
"""
In [64]:
def parse_access_flags_from_html(html):
soup = BeautifulSoup(html)
for tr in soup.table.select("tr"):
tds = tr.select("td")
if len(tds) == 3:
acs_flag = AcsFlag(
*(list(map(lambda td: re.sub(r"\s", " ", td.text).strip(), tds))))
ALL_ACCESS_FLAGS[bytes.fromhex(acs_flag.value.replace('0x', ''))] = acs_flag
parse_access_flags_from_html(data)
# pprint
pd.DataFrame(ALL_ACCESS_FLAGS, index=["Flag Name", "Value", "Interpretation"]).T
Out[64]:
Flag Name | Value | Interpretation | |
---|---|---|---|
b'\x00\x01' | ACC_PUBLIC | 0x0001 | Declared public; may be accessed from outside ... |
b'\x00\x10' | ACC_FINAL | 0x0010 | Declared final; no subclasses allowed. |
b'\x00 ' | ACC_SUPER | 0x0020 | Treat superclass methods specially when invoke... |
b'\x02\x00' | ACC_INTERFACE | 0x0200 | Is an interface, not a class. |
b'\x04\x00' | ACC_ABSTRACT | 0x0400 | Declared abstract; must not be ... |
b'\x10\x00' | ACC_SYNTHETIC | 0x1000 | Declared synthetic; not present in the source ... |
b' \x00' | ACC_ANNOTATION | 0x2000 | Declared as an annotation type. |
b'@\x00' | ACC_ENUM | 0x4000 | Declared as an enum type. |
In [65]:
from typing import List
def parse_access_flags_arr(access_flags: Union[bytes, int]) -> List[str]:
if isinstance(access_flags, tuple):
access_flags = access_flags[-1]
if isinstance(access_flags, bytes):
acs_flags_ival = int.from_bytes(resolver.access_flags[-1], "big",signed=False)
else:
acs_flags_ival = access_flags
res = []
for bytes_k, acs_flag in ALL_ACCESS_FLAGS.items():
if acs_flags_ival & struct.unpack('>H', bytes_k)[-1]:
res.append(acs_flag.flag_name)
return res
In [66]:
resolver.access_flags = resolver.next(2, RTEnum.bytes_)
# bind 访问符数组
# acs_flags_ival = int.from_bytes(resolver.access_flags[-1], "big",signed=False)
# acs_flags_ival = struct.unpack('>H', resolver.access_flags[-1])[-1]
resolver.access_flags_arr = parse_access_flags_arr(resolver.access_flags)
resolver.access_flags, resolver.access_flags_arr
Out[66]:
((305, b'\x00!'), ['ACC_PUBLIC', 'ACC_SUPER'])
2.6 this_class;¶
In [67]:
resolver.this_class = resolver.next(2, RTEnum.int_)
resolver.constant_pool[resolver.this_class[-1]]
Out[67]:
{'tag': 'CONSTANT_Class_info', 'name_index': (21, 24)}
2.7 super_class;¶
In [68]:
resolver.super_class = resolver.next(2, RTEnum.int_)
resolver.constant_pool[resolver.super_class[-1]]
Out[68]:
{'tag': 'CONSTANT_Class_info', 'name_index': (24, 25)}
2.8 interfaces_count;¶
In [69]:
resolver.interfaces_count = resolver.next(2, RTEnum.int_)
resolver.interfaces_count
Out[69]:
(311, 0)
2.9 interfaces[interfaces_count];¶
In [70]:
resolver.interfaces = []
for intf in range(resolver.interfaces_count[-1]):
resolver.interfaces.append(resolver.next(2, RTEnum.int_))
resolver.interfaces
Out[70]:
[]
2.10 fields_count;¶
In [71]:
resolver.fields_count = resolver.next(2, RTEnum.int_)
resolver.fields_count
Out[71]:
(313, 1)
2.11 fields[fields_count];¶
Attribute¶
Attribute | Section | class file
|
Java SE |
---|---|---|---|
ConstantValue |
§4.7.2 | 45.3 | 1.0.2 |
Code |
§4.7.3 | 45.3 | 1.0.2 |
StackMapTable |
§4.7.4 | 50.0 | 6 |
Exceptions |
§4.7.5 | 45.3 | 1.0.2 |
InnerClasses |
§4.7.6 | 45.3 | 1.1 |
EnclosingMethod |
§4.7.7 | 49.0 | 5.0 |
Synthetic |
§4.7.8 | 45.3 | 1.1 |
Signature |
§4.7.9 | 49.0 | 5.0 |
SourceFile |
§4.7.10 | 45.3 | 1.0.2 |
SourceDebugExtension |
§4.7.11 | 49.0 | 5.0 |
LineNumberTable |
§4.7.12 | 45.3 | 1.0.2 |
LocalVariableTable |
§4.7.13 | 45.3 | 1.0.2 |
LocalVariableTypeTable |
§4.7.14 | 49.0 | 5.0 |
Deprecated |
§4.7.15 | 45.3 | 1.1 |
RuntimeVisibleAnnotations |
§4.7.16 | 49.0 | 5.0 |
RuntimeInvisibleAnnotations |
§4.7.17 | 49.0 | 5.0 |
RuntimeVisibleParameterAnnotations |
§4.7.18 | 49.0 | 5.0 |
RuntimeInvisibleParameterAnnotations |
§4.7.19 | 49.0 | 5.0 |
RuntimeVisibleTypeAnnotations |
§4.7.20 | 52.0 | 8 |
RuntimeInvisibleTypeAnnotations |
§4.7.21 | 52.0 | 8 |
AnnotationDefault |
§4.7.22 | 49.0 | 5.0 |
BootstrapMethods |
§4.7.23 | 51.0 | 7 |
MethodParameters |
§4.7.24 | 52.0 | 8 |
In [ ]:
CONSTANT_POOL_TAGS_TO_HANDLER = {
7: do_CONSTANT_Class_info,
9: do_CONSTANT_Fieldref_info,
10: do_CONSTANT_Methodref_info,
11: do_CONSTANT_InterfaceMethodref_info,
8: do_CONSTANT_String_info,
3: do_CONSTANT_Integer_info,
4: do_CONSTANT_Float_info,
5: do_CONSTANT_Long_info,
6: do_CONSTANT_Double_info,
12: do_CONSTANT_NameAndType_info,
1: do_CONSTANT_Utf8_info,
15: do_CONSTANT_MethodHandle_info,
16: do_CONSTANT_MethodType_info,
18: do_CONSTANT_InvokeDynamic_info,
}
In [7]:
# region common parse
def do_common_attribute(resolver: Resolver, attribute_info: dict):
attribute_info["attribute_name_index"] = resolver.next(2, RTEnum.int_)
attribute_info["attribute_length"] = resolver.next(4, RTEnum.int_)
import re
EXP_PTN = re.compile(r".*(?P<len>u\d)\s+(?P<key>\w+);.*")
def do_exp(resolver: Resolver, exp_or_exps: str, res: dict=None, rtype: RTEnum = RTEnum.int_):
if res is None:
res = {}
for exp in exp_or_exps.split("\n"):
if len(exp.strip()) == 0:
continue
matcher = EXP_PTN.match(exp)
if matcher:
res[matcher.group("key")] = resolver.next(matcher.group("len"), rtype)
print(matcher.groupdict())
else:
print("Unknown exp: ", exp)
return res
# endregion common parse
def parse_ConstantValue_attribute(resolver: Resolver):
"""
ConstantValue_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 constantvalue_index;
}
"""
# attribute_info = {}
# do_common_attribute(resolver, attribute_info)
# attribute_info["constantvalue_index"] = resolver.next(2, RTEnum.int_)
# return attribute_info
return do_exp(resolver, parse_ConstantValue_attribute.__doc__)
def parse_Code_attribute(resolver: Resolver):
"""
Code_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[code_length];
u2 exception_table_length;
{ u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
"""
attribute_info = {}
do_common_attribute(resolver, attribute_info)
do_exp(resolver, """
u2 max_stack;
u2 max_locals;
u4 code_length;
""", attribute_info, RTEnum.int_)
attribute_info["code"] = resolver.next(attribute_info["code_length"], RTEnum.bytes_)
do_exp(resolver, "u2 exception_table_length;", attribute_info, RTEnum.int_)
attribute_info["exception_table"] = []
for _ in range(attribute_info["exception_table_length"]):
attribute_info["exception_table"].append(
do_exp(
resolver,
"""
{ u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
""",
rtype = RTEnum.int_
)
)
do_exp(resolver, "u2 attributes_count;", attribute_info)
# TODO attribute_info attributes[attributes_count];
return attribute_info
def parse_StackMapTable_attribute(resolver: Resolver):
'''
StackMapTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_entries;
stack_map_frame entries[number_of_entries];
}
'''
attr_info = do_exp(resolver, parse_StackMapTable_attribute.__doc__)
# TODO stack_map_frame entries[number_of_entries];
return attr_info
def parse_Exceptions_attribute(resolver: Resolver):
'''
Exceptions_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_exceptions;
u2 exception_index_table[number_of_exceptions];
}
'''
attr_info = do_exp(resolver,
'''
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_exceptions;
''')
attr_info['exception_index_table'] = []
for exception_index in range(attr_info['number_of_exceptions']):
attr_info['exception_index_table'].append(resolver.next('u2', RTEnum.int_))
return attr_info
def parse_Exceptions_attribute(resolver: Resolver):
'''
Exceptions_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_exceptions;
u2 exception_index_table[number_of_exceptions];
}
'''
attr_info = do_exp(resolver,
'''
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_exceptions;
''')
attr_info['exception_index_table'] = []
for exception_index in range(attr_info['number_of_exceptions']):
attr_info['exception_index_table'].append(resolver.next('u2', RTEnum.int_))
return attr_info
def parse_attribute_info(resolver: Resolver) -> dict:
"""
attribute_info {
u2 attribute_name_index;
u4 attribute_length;
u1 info[attribute_length];
}
Args:
resolver (Resolver): _description_
"""
attribute_info = {}
attribute_info["attribute_name_index"] = resolver.next(2, RTEnum.int_)
attribute_info["attribute_length"] = resolver.next(4, RTEnum.int_)
# TODO 需要详细解析
attribute_info["info"] = resolver.next(attribute_info["attribute_length"][-1], RTEnum.bytes_)
return attribute_info
In [35]:
import json
import types
ATTR_TAGS_TO_HANDLER = {}
for k, v in globals().items():
if isinstance(v, types.FunctionType) and k.endswith("_attribute"):
k = k.replace("parse_", "")
print("add handler %s: %s" % (k, v))
ATTR_TAGS_TO_HANDLER[k]= v
add handler do_common_attribute:<function do_common_attribute at 0x000001727063E620> add handler ConstantValue_attribute:<function parse_ConstantValue_attribute at 0x000001727063E378> add handler Code_attribute:<function parse_Code_attribute at 0x000001727063E8C8> add handler StackMapTable_attribute:<function parse_StackMapTable_attribute at 0x000001727063E950> add handler Exceptions_attribute:<function parse_Exceptions_attribute at 0x000001727063EA60>
In [41]:
json.dumps(json.loads("""{\"RETCODE\":\"AAAAAAA\",\"TRANSERIAL\":\"PWAP01710019717764284416\",\"TOTALNM\":\"10\",\"resultList\":[{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"104\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"募集期\",\"MINHOLDTERMUNIT\":\"\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20221128\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"0\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20221205\",\"PRDSTT_Show\":\"募集期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"1699369173.28\",\"LASTMONSNAVDATE\":\"0\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"2.750-3.050%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"0\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"1\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"0.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"1699369173.28\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"业绩比较基准\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"0\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20221206\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.000000000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"0\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"产品业绩基准是在产品说明书约定的投资范围内,根据产品投资策略、市场环境和各类资产的投资比例及收益率水平进行综合测算而得出,业绩基准为2.75%-3.05%。\",\"RESAMT\":\"\",\"LASTMONS\":\"-1\",\"BOOKSELLDATE\":\"0\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"(闲钱+)安盈象固收稳健三个月封闭式1号A\",\"PRDATTR\":\"0\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"0\",\"ISVALID\":\"1\",\"PRDCODE\":\"AF221458A\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"2000000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20230320\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"100 00 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"0\",\"TRANSMODE\":\"2\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0297\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1000000.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"停止交易\",\"MINHOLDTERMUNIT\":\"0\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20220301\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"20221205\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20220307\",\"PRDSTT_Show\":\"停止交易\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"3\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"49999023077.00\",\"LASTMONSNAVDATE\":\"20221031\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"3.930%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"0\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"4\",\"LASTMONSRATE\":\"0.002824000000\",\"TANAME\":\"光大理财有限责任公司\",\"LASTMONSNAV\":\"1.026800000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"49999023077.00\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"近6月年化收益率\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"14\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20220308\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"0\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"150000\",\"LASTINCOMERATE\":\"0.000000000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"90\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"本产品资金主要投资于债券、优先股、非标准化债权类资产等以绝对收益为目标的资产。业绩比较基准基于本产品策略,根据中债总财富(1-3年)指数以及中证800指数收益率相关数据模拟回测。\",\"RESAMT\":\"\",\"LASTMONS\":\"1\",\"BOOKSELLDATE\":\"20221205\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"(安心+)阳光橙安盈增强季开2号I(私银)\",\"PRDATTR\":\"0\",\"TACODE\":\"EW\",\"OPENPERIOD\":\"3\",\"ISVALID\":\"1\",\"PRDCODE\":\"EW377I\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"51200000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991231\",\"NAVDATE\":\"20221130\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"001 00 1 0000000000000 000000 00000000 0000000000000000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"光大理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0666\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"20220831\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"20221130\",\"PRDSTTNM\":\"停止交易\",\"MINHOLDTERMUNIT\":\"0\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"固收投资,风格稳健,每季度开放流动性优\",\"IPOSTARTDATE\":\"20210222\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"20221207\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20210302\",\"PRDSTT_Show\":\"停止交易\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"3\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"2105514515.53\",\"LASTMONSNAVDATE\":\"20221102\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"3.528%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"7\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"4\",\"LASTMONSRATE\":\"0.002726000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"1.063700000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"2105514515.53\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"1.06660000\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"0\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"1\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"近3月年化收益率\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"14\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20210304\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"0\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.438755250596\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"90\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"目前同盈象系列理财产品属性为固收类产品,底仓主要投资银行间短融中票、PPN、交易所非公开公司债等信用债品种和少量同业存单。根据当前市场利率水平、组合目标久期、可投资债券的静态收益率、债券杠杆操作等因素作为测算依据,扣除相关税费成本后,综合得出产品的业绩基准。\",\"RESAMT\":\"\",\"LASTMONS\":\"1\",\"BOOKSELLDATE\":\"20221207\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"同盈象固收稳健季开3号\",\"PRDATTR\":\"0\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"3\",\"ISVALID\":\"1\",\"PRDCODE\":\"AF21A2085\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"6100000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991229\",\"NAVDATE\":\"20221130\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"001 00 1 0000000000000 000000 00000000 0000000000000000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1000000.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"募集期\",\"MINHOLDTERMUNIT\":\"0\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20221122\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"20221207\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20221202\",\"PRDSTT_Show\":\"募集期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"15\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"4333910451.83\",\"LASTMONSNAVDATE\":\"0\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"3.650-4.450%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"22\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"1\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"0.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"4333910451.83\",\"AREANO\":\"\"
,\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"业绩比较基准\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"14\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20221205\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"0\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.000000000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"420\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"全盈象固收稳健系列理财产品属性为固收类产品,底仓主要投资银行间短融中票、PPN、交易所非公开公司债等信用债品种、非标准化债权类资产、在银行间市场和证券交易所市场发行的资产支持证券、非公开定向债务融资工具、债券型证券投资基金,以及同业存单等少量货币市场类资产。本产品为100%债权类资产,其中非标准化债券类资产不超过49%。根据当前市场利率水平、组合目标久期、可投资债券的静态收益率、债券杠杆操作等因素作为测算依据,扣除相关税费成本后,综合得出本产品业绩基准。\",\"RESAMT\":\"\",\"LASTMONS\":\"-1\",\"BOOKSELLDATE\":\"20240222\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"全盈象固收稳健十四个月定开6号D\",\"PRDATTR\":\"0\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"14\",\"ISVALID\":\"1\",\"PRDCODE\":\"AF222705D\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"5000000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991229\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"001 00 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"募集期\",\"MINHOLDTERMUNIT\":\"0\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20221128\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"20221208\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20221205\",\"PRDSTT_Show\":\"募集期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"15\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"4668222467.12\",\"LASTMONSNAVDATE\":\"0\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"3.900-4.700%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"21\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"1\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"0.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"4668222467.12\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"业绩比较基准\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"7\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20221206\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"0\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.000000000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"360\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"产品重点投资于信用债、非标等资产,并结合一定的杠杆操作和交易策略对组合收益进行增厚。根据当前市场利率水平、组合目标久期、可投资债券的静态收益率、债券杠杆操作等因素作为测算依据,扣除相关税费成本后,综合得出产品的业绩基准。\",\"RESAMT\":\"\",\"LASTMONS\":\"-1\",\"BOOKSELLDATE\":\"20240221\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"安盈象固收稳健一年定开26号A\",\"PRDATTR\":\"0\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"12\",\"ISVALID\":\"1\",\"PRDCODE\":\"AF222709A\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"5000000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991229\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"100 00 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"开放期\",\"MINHOLDTERMUNIT\":\"\",\"INCOMERATE\":\"0.024740\",\"EXPLAIN\":\"T日(国家工作日)17:00前发起申赎,T+1申购起息、T+1晚间赎回到账;单个客户限购600万\",\"IPOSTARTDATE\":\"20201026\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"低风险\",\"BOOKBUYDATE\":\"0\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20201026\",\"PRDSTT_Show\":\"开放期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"555985404.37\",\"LASTMONSNAVDATE\":\"20221103\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"0\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"0\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"兴银理财有限责任公司\",\"LASTMONSNAV\":\"1.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"555985404.37\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"0\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20201027\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"0.66120\",\"OPENPERIODFLAG\":\"2\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"170000\",\"LASTINCOMERATE\":\"0.024740000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"1\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"\",\"RESAMT\":\"\",\"LASTMONS\":\"1\",\"BOOKSELLDATE\":\"0\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"兴银添利宝(中信专属)\",\"PRDATTR\":\"1\",\"TACODE\":\"Y05\",\"OPENPERIOD\":\"1\",\"ISVALID\":\"1\",\"PRDCODE\":\"9B310015\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"87741059011.25\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"017\",\"CLOSEDATE\":\"20991230\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"1\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"010 10 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"兴银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"0\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1000000.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"募集期\",\"MINHOLDTERMUNIT\":\"0\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20221129\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"20221213\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20221206\",\"PRDSTT_Show\":\"募集期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"7\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"49984690000.00\",\"LASTMONSNAVDATE\":\"0\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"3.280-3.780%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"6\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"1\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"0.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"49984690000.00\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"业绩比较基准\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"14\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20221207\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"0\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.000000000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"180\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"目前同盈象系列理财产品属性为固收类产品,底仓主要投资银行间短融中票、PPN、交易所非公开公司债等信用债品种和少量同业存单。根据当前市场利率水平、组合目标久期、可投资债券的静态收益率、债券杠杆操作等因素作为测算依据,扣除相关税费成本后,综合得出产品的业绩基准,该业绩比较基准不等于理财产品未来实际收益,不作为未来产品收益的业绩保证。\",\"RESAMT\":\"\",\"LASTMONS\":\"-1\",\"BOOKSELLDATE\":\"20230706\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"同盈象固收稳健半年定开45号D(私享2号)\",\"
PRDATTR\":\"0\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"6\",\"I
SVALID\":\"1\",\"PRDCODE\":\"AF222475D\",\"TURNNO\":\"\",\"TOTSELLL
MS\":\"50000000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSED
ATE\":\"20991229\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"100 00 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0562\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"20220601\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"20221130\",\"PRDSTTNM\":\"停止交易\",\"MINHOLDTERMUNIT\":\"0\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20210514\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"20221205\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20210517\",\"PRDSTT_Show\":\"停止交易\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"6\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"468627858.88\",\"LASTMONSNAVDATE\":\"20221102\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"2.987%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"5\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"4\",\"LASTMONSRATE\":\"-0.003303000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"1.059700000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"468627858.88\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"1.05620000\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"0\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"1\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"近6月年化收益率\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"7\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20210519\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"0\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.074157851227\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"180\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"目前同盈象系列理财产品属性为固收类产品,底仓主要投资银行间短融中票、PPN、交易所非公开公司债等信用债品种和少量同业存单。根据当前市场利率水平、组合目标久期、可投资债券的静态收益率、债券杠杆操作等因素作为测算依据,扣除相关税费成本后,综合得出产品的业绩基准\",\"RESAMT\":\"\",\"LASTMONS\":\"1\",\"BOOKSELLDATE\":\"20221205\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"同盈象固收稳健半年定开8号A\",\"PRDATTR\":\"0\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"6\",\"ISVALID\":\"1\",\"PRDCODE\":\"AF212005A\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"1403000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991229\",\"NAVDATE\":\"20221130\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"001 00 1 0000000000000 000000 00000000 0000000000000000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"3000000.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"开放期\",\"MINHOLDTERMUNIT\":\"\",\"INCOMERATE\":\"0.021780\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20200717\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"低风险\",\"BOOKBUYDATE\":\"0\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20200803\",\"PRDSTT_Show\":\"开放期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"1\",\"TOTUSEAMT\":\"182440532975.00\",\"LASTMONSNAVDATE\":\"20221103\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"0\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"0\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"1.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"182440532975.00\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"0\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20200804\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"0.59860\",\"OPENPERIODFLAG\":\"2\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.021780000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"1\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"\",\"RESAMT\":\"\",\"LASTMONS\":\"1\",\"BOOKSELLDATE\":\"0\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"慧赢天天智选1号\",\"PRDATTR\":\"1\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"1\",\"ISVALID\":\"1\",\"PRDCODE\":\"A204D2946\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"2786950000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991214\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"1\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"010 11 0 0000111000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"0\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"112\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"募集期\",\"MINHOLDTERMUNIT\":\"\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20221130\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"0\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20221205\",\"PRDSTT_Show\":\"募集期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"1998193945.00\",\"LASTMONSNAVDATE\":\"0\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"2.90%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"0\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"1\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"华夏理财有限责任公司\",\"LASTMONSNAV\":\"0.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"1998193945.00\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"业绩比较基准\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"0\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20221206\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.000000000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"0\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"管理人以产品投资存款类资产仓位60%-80%,非标债权类资产仓位20%-40%,组合杠杆率100%为例,参考当前存款类资产收益水平、期限匹配的非标债权类资产目标收益率,结合产品投资策略并扣除各项费用后,综合测算得出上述业绩比较基准。测算示例仅供参考,具体资产投资比例可根据各类资产的收益水平、流动性特征、信用风险等因素动态调整。\",\"RESAMT\":\"\",\"LASTMONS\":\"-1\",\"BOOKSELLDATE\":\"0\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"(闲钱+)华夏理财固收债权封闭式26号112天\",\"PRDATTR\":\"0\",\"TACODE\":\"Y4\",\"OPENPERIOD\":\"0\",\"ISVALID\":\"1\",\"PRDCODE\":\"22121026A\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"2000000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20230328\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"100 00 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"华夏理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"0\",\"TRANSMODE\
":\"2\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"}],\"TOKENID\":\"\"}"""""), ensure_ascii=False)
--------------------------------------------------------------------------- JSONDecodeError Traceback (most recent call last) <ipython-input-41-1b0456a6c5f3> in <module> 5 MS\":\"50000000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSED 6 ATE\":\"20991229\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"100 00 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0562\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"20220601\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"20221130\",\"PRDSTTNM\":\"停止交易\",\"MINHOLDTERMUNIT\":\"0\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20210514\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"20221205\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20210517\",\"PRDSTT_Show\":\"停止交易\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"6\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"468627858.88\",\"LASTMONSNAVDATE\":\"20221102\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"2.987%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"5\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"4\",\"LASTMONSRATE\":\"-0.003303000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"1.059700000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"468627858.88\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"1.05620000\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"0\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"1\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"近6月年化收益率\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"7\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20210519\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"0\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.074157851227\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"180\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"目前同盈象系列理财产品属性为固收类产品,底仓主要投资银行间短融中票、PPN、交易所非公开公司债等信用债品种和少量同业存单。根据当前市场利率水平、组合目标久期、可投资债券的静态收益率、债券杠杆操作等因素作为测算依据,扣除相关税费成本后,综合得出产品的业绩基准\",\"RESAMT\":\"\",\"LASTMONS\":\"1\",\"BOOKSELLDATE\":\"20221205\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"同盈象固收稳健半年定开8号A\",\"PRDATTR\":\"0\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"6\",\"ISVALID\":\"1\",\"PRDCODE\":\"AF212005A\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"1403000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991229\",\"NAVDATE\":\"20221130\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"001 00 1 0000000000000 000000 00000000 0000000000000000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"1\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"3000000.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"0\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"开放期\",\"MINHOLDTERMUNIT\":\"\",\"INCOMERATE\":\"0.021780\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20200717\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"低风险\",\"BOOKBUYDATE\":\"0\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20200803\",\"PRDSTT_Show\":\"开放期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"1\",\"TOTUSEAMT\":\"182440532975.00\",\"LASTMONSNAVDATE\":\"20221103\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"0\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"0\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"信银理财有限责任公司\",\"LASTMONSNAV\":\"1.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"182440532975.00\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"0\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20200804\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"0.59860\",\"OPENPERIODFLAG\":\"2\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.021780000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"1\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"\",\"RESAMT\":\"\",\"LASTMONS\":\"1\",\"BOOKSELLDATE\":\"0\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"慧赢天天智选1号\",\"PRDATTR\":\"1\",\"TACODE\":\"YZX\",\"OPENPERIOD\":\"1\",\"ISVALID\":\"1\",\"PRDCODE\":\"A204D2946\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"2786950000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20991214\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"1\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"010 11 0 0000111000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"信银理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"0\",\"TRANSMODE\":\"0\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"},{\"RESDATE\":\"\",\"NAV\":\"1.0000\",\"IPOMODE\":\"0\",\"STARTAMT\":\"1.00\",\"EXTCHARGEFLAG\":\"0\",\"LVALDATE\":\"\",\"PRDDEADLINE\":\"112\",\"INSTFLAG\":\"0\",\"NVALDATE\":\"\",\"PRDSTTNM\":\"募集期\",\"MINHOLDTERMUNIT\":\"\",\"INCOMERATE\":\"\",\"EXPLAIN\":\"\",\"IPOSTARTDATE\":\"20221130\",\"PURCHASEMODE\":\"1\",\"ISONLINESALE\":\"4\",\"RISKLEVEL_Show\":\"较低风险\",\"BOOKBUYDATE\":\"0\",\"CITYCODE\":\"\",\"GUESTMIDRATIO\":\"\",\"AREACN\":\"\",\"IPOENDDATE\":\"20221205\",\"PRDSTT_Show\":\"募集期\",\"TIMEPOINTASSETSCTL\":\"\",\"PRDSTAGE\":\"\",\"BILLFLAG\":\"0\",\"SECRESENDTIME\":\"000000\",\"FSTRESSTARTTIME\":\"000000\",\"GUESTRATIO\":\"0.00000\",\"TAFLAG\":\"1\",\"LATENAVDATE\":\"\",\"MINHOLDTERM\":\"\",\"AUTOINVESTFLAG\":\"0\",\"CLOSETIMEBYE\":\"0\",\"TOTUSEAMT\":\"1998193945.00\",\"LASTMONSNAVDATE\":\"0\",\"FSTRESSTARTDATE\":\"0\",\"JZHBINCOM\":\"2.90%\",\"SECRESENDDATE\":\"0\",\"OPENDAY\":\"0\",\"SHARECLASS\":\"0\",\"PRDSTT\":\"1\",\"LASTMONSRATE\":\"0.000000000000\",\"TANAME\":\"华夏理财有限责任公司\",\"LASTMONSNAV\":\"0.000000000000\",\"LOCKDAYS\":\"0\",\"PRDTYPE\":\"1\",\"ISYUEDONGPRD\":\"0\",\"transClients\":\"bcde01245\",\"FINCPRDBAL\":\"1998193945.00\",\"AREANO\":\"\",\"CURRENTHACAPITALGT\":\"0.00\",\"VALUE\":\"\",\"SECRESSTARTTIME\":\"000000\",\"INCOMEFLAG\":\"\",\"ISOPENDAY\":\"N\",\"PRDSTYLE\":\"\",\"FSTRESENDTIME\":\"000000\",\"INDESCRIPTION\":\"业绩比较基准\",\"CURRTYPE\":\"001\",\"ISSHORTTERM\":\"0\",\"INVESTCYC\":\"0\",\"PLEDGEFLAG\":\"0\",\"BOOKBUYDAYS\":\"0\",\"LATENAV\":\"\",\"AUTOINVESTDATE\":\"20221206\",\"LIMITFLAG\":\"1\",\"UNIT\":\"0.00\",\"FSTRESENDDATE\":\"0\",\"PREVAUMASSETGT\":\"0.00\",\"SNDFLAG\":\"0\",\"FINCTAGJSONSTR\":\"null\",\"INCOMEUNIT\":\"\",\"OPENPERIODFLAG\":\"\",\"RECOMMENDFLAG\":\"1000000000\",\"CLOSETIME\":\"153000\",\"LASTINCOMERATE\":\"0.000000000000\",\"RESFLAG\":\"0\",\"AVAILIMIT\":\"\",\"OPENPERIODDAY\":\"0\",\"PRINCIPALFLAG\":\"0\",\"CALACCORD\":\"管理人以产品投资存款类资产仓位60%-80%,非标债权类资产仓位20%-40%,组合杠杆率100%为例,参考当前存款类资产收益水平、期限匹配的非标债权类资产目标收益率,结合产品投资策略并扣除各项费用后,综合测算得出上述业绩比较基准。测算示例仅供参考,具体资产投资比例可根据各类资产的收益水平、流动性特征、信用风险等因素动态调整。\",\"RESAMT\":\"\",\"LASTMONS\":\"-1\",\"BOOKSELLDATE\":\"0\",\"CURRTYPE_Show\":\"人民币\",\"PRDNAME\":\"(闲钱+)华夏理财固收债权封闭式26号112天\",\"PRDATTR\":\"0\",\"TACODE\":\"Y4\",\"OPENPERIOD\":\"0\",\"ISVALID\":\"1\",\"PRDCODE\":\"22121026A\",\"TURNNO\":\"\",\"TOTSELLLMS\":\"2000000000.00\",\"PASSINVESTORSCTL\":\"\",\"CHANNELS\":\"0137\",\"CLOSEDATE\":\"20230328\",\"NAVDATE\":\"20221201\",\"RISKLEVEL\":\"2\",\"NTMKTFLAG\":\"\",\"SECRESSTARTDATE\":\"0\",\"TRANSSTATUS\":\"100 00 0 0000000000000 000000 00000000 0000000000001000001100000000000000000000000000000000000000\",\"GUESTMAXRATIO\":\"\",\"TASHORTNAME\":\"华夏理财\",\"GUESTMINRATIO\":\"\",\"ELECFLAG\":\"0\",\"RESERVED\":\"0\",\"CPFL\":\"5\",\"BOOKBUYFLAG\":\"0\",\"TRANSMODE\ ----> 7 ":\"2\",\"transClientsCN\":\"富裕客户、贵宾客户、私行客户、大众客户、个人普通客户、个人金卡客户、个人白金客户、个人钻石客户、黑金卡客户\",\"PSALEFLAG\":\"0\"}],\"TOKENID\":\"\"}"""""), ensure_ascii=False) d:\Users\Administrator\anaconda3\envs\python3.6\lib\json\__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 352 parse_int is None and parse_float is None and 353 parse_constant is None and object_pairs_hook is None and not kw): --> 354 return _default_decoder.decode(s) 355 if cls is None: 356 cls = JSONDecoder d:\Users\Administrator\anaconda3\envs\python3.6\lib\json\decoder.py in decode(self, s, _w) 337 338 """ --> 339 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 340 end = _w(s, end).end() 341 if end != len(s): d:\Users\Administrator\anaconda3\envs\python3.6\lib\json\decoder.py in raw_decode(self, s, idx) 353 """ 354 try: --> 355 obj, end = self.scan_once(s, idx) 356 except StopIteration as err: 357 raise JSONDecodeError("Expecting value", s, err.value) from None JSONDecodeError: Invalid control character at: line 2 column 8193 (char 16535)
2.11.1 field_info¶
field_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
2.11.1.1 access_flags¶
In [73]:
data = """
<table summary="Field access and property flags" border="1">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th>Flag Name</th>
<th>Value</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="literal">ACC_PUBLIC</code></td>
<td>0x0001</td>
<td>Declared <code class="literal">public</code>; may be accessed from outside its
package.
</td>
</tr>
<tr>
<td><code class="literal">ACC_PRIVATE</code></td>
<td>0x0002</td>
<td>Declared <code class="literal">private</code>; usable only within the defining
class.
</td>
</tr>
<tr>
<td><code class="literal">ACC_PROTECTED</code></td>
<td>0x0004</td>
<td>Declared <code class="literal">protected</code>; may be accessed within
subclasses.
</td>
</tr>
<tr>
<td><code class="literal">ACC_STATIC</code></td>
<td>0x0008</td>
<td>Declared <code class="literal">static</code>.
</td>
</tr>
<tr>
<td><code class="literal">ACC_FINAL</code></td>
<td>0x0010</td>
<td>Declared <code class="literal">final</code>; never directly assigned to
after object construction (JLS §17.5).
</td>
</tr>
<tr>
<td><code class="literal">ACC_VOLATILE</code></td>
<td>0x0040</td>
<td>Declared <code class="literal">volatile</code>; cannot be cached.
</td>
</tr>
<tr>
<td><code class="literal">ACC_TRANSIENT</code></td>
<td>0x0080</td>
<td>Declared <code class="literal">transient</code>; not written or read by a
persistent object manager.
</td>
</tr>
<tr>
<td><code class="literal">ACC_SYNTHETIC</code></td>
<td>0x1000</td>
<td>Declared synthetic; not present in the source
code.
</td>
</tr>
<tr>
<td><code class="literal">ACC_ENUM</code></td>
<td>0x4000</td>
<td>Declared as an element of an <code class="literal">enum</code>.
</td>
</tr>
</tbody>
</table>
"""
In [74]:
parse_access_flags_from_html(data)
# pprint
pd.DataFrame(ALL_ACCESS_FLAGS, index=["Flag Name", "Value", "Interpretation"]).T
Out[74]:
Flag Name | Value | Interpretation | |
---|---|---|---|
b'\x00\x01' | ACC_PUBLIC | 0x0001 | Declared public; may be accessed from outside ... |
b'\x00\x10' | ACC_FINAL | 0x0010 | Declared final; never directly assigned to ... |
b'\x00 ' | ACC_SUPER | 0x0020 | Treat superclass methods specially when invoke... |
b'\x02\x00' | ACC_INTERFACE | 0x0200 | Is an interface, not a class. |
b'\x04\x00' | ACC_ABSTRACT | 0x0400 | Declared abstract; must not be ... |
b'\x10\x00' | ACC_SYNTHETIC | 0x1000 | Declared synthetic; not present in the source ... |
b' \x00' | ACC_ANNOTATION | 0x2000 | Declared as an annotation type. |
b'@\x00' | ACC_ENUM | 0x4000 | Declared as an element of an enum. |
b'\x00\x02' | ACC_PRIVATE | 0x0002 | Declared private; usable only within the defin... |
b'\x00\x04' | ACC_PROTECTED | 0x0004 | Declared protected; may be accessed within ... |
b'\x00\x08' | ACC_STATIC | 0x0008 | Declared static. |
b'\x00@' | ACC_VOLATILE | 0x0040 | Declared volatile; cannot be cached. |
b'\x00\x80' | ACC_TRANSIENT | 0x0080 | Declared transient; not written or read by a ... |
In [75]:
def parse_attributes(resolver: Resolver, attributes_count: Union[int, tuple]) -> List[dict]:
attributes_count = attributes_count[-1] if isinstance(attributes_count, tuple) else attributes_count
return list(map(
lambda ind: parse_attribute_info(resolver),
range(attributes_count)
))
def parse_field_info(resolver: Resolver):
field_info = {}
def _do_access_flags():
field_info['access_flags'] = resolver.next(2, RTEnum.bytes_)
# bind 访问符数组
acs_flags_ival = struct.unpack('>H', field_info['access_flags'][-1])[-1]
field_info['access_flags_arr'] = parse_access_flags_arr(field_info['access_flags'])
def _do_name_index():
field_info["name_index"] = resolver.next(2, RTEnum.int_)
def _do_descriptor_index():
field_info["descriptor_index"] = resolver.next(2, RTEnum.int_)
def _do_attributes_count():
field_info["attributes_count"] = resolver.next(2, RTEnum.int_)
def _do_attributes():
field_info["attributes"] = parse_attributes(resolver, field_info["attributes_count"])
_do_access_flags()
_do_name_index()
_do_descriptor_index()
_do_attributes_count()
_do_attributes()
return field_info
In [76]:
resolver.fields = []
for _ in range(resolver.fields_count[-1]):
resolver.fields.append(parse_field_info(resolver))
resolver.fields
Out[76]:
[{'access_flags': (315, b'\x00\x02'), 'access_flags_arr': ['ACC_PUBLIC', 'ACC_SUPER'], 'name_index': (317, 5), 'descriptor_index': (319, 6), 'attributes_count': (321, 2), 'attributes': [{'attribute_name_index': (323, 7), 'attribute_length': (325, 0), 'info': (329, b'')}, {'attribute_name_index': (329, 8), 'attribute_length': (331, 6), 'info': (335, b'\x00\x01\x00\t\x00\x00')}]}]
In [77]:
resolver.constant_pool[5:9]
Out[77]:
[{'tag': 'CONSTANT_Utf8_info', 'length': (27, 3), 'bytes[length]': (29, b'num')}, {'tag': 'CONSTANT_Utf8_info', 'length': (33, 1), 'bytes[length]': (35, b'I')}, {'tag': 'CONSTANT_Utf8_info', 'length': (37, 10), 'bytes[length]': (39, b'Deprecated')}, {'tag': 'CONSTANT_Utf8_info', 'length': (50, 25), 'bytes[length]': (52, b'RuntimeVisibleAnnotations')}]
2.12 methods_count;¶
In [78]:
resolver.methods_count = resolver.next(2, RTEnum.int_)
resolver.methods_count
Out[78]:
(341, 2)
2.13 methods[methods_count];¶
In [79]:
def parse_methed_info(resolver: Resolver) -> dict:
"""
method_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
"""
method_info = do_exp(resolver, parse_methed_info.__doc__)
method_info["access_flags_arr"] = parse_access_flags_arr(method_info["access_flags"])
method_info["attributes"] = parse_attributes(resolver, method_info["attributes_count"])
return method_info
In [80]:
resolver.methods = []
for _ in range(resolver.methods_count[-1]):
resolver.methods.append(parse_methed_info(resolver))
resolver.methods
Unknown exp: method_info { {'len': 'u2', 'key': 'access_flags'} {'len': 'u2', 'key': 'name_index'} {'len': 'u2', 'key': 'descriptor_index'} {'len': 'u2', 'key': 'attributes_count'} Unknown exp: attribute_info attributes[attributes_count]; Unknown exp: } Unknown exp: method_info { {'len': 'u2', 'key': 'access_flags'} {'len': 'u2', 'key': 'name_index'} {'len': 'u2', 'key': 'descriptor_index'} {'len': 'u2', 'key': 'attributes_count'} Unknown exp: attribute_info attributes[attributes_count]; Unknown exp: }
Out[80]:
[{'access_flags': (343, 1), 'name_index': (345, 10), 'descriptor_index': (347, 11), 'attributes_count': (349, 1), 'access_flags_arr': ['ACC_PUBLIC'], 'attributes': [{'attribute_name_index': (351, 12), 'attribute_length': (353, 56), 'info': (357, b'\x00\x02\x00\x01\x00\x00\x00\n*\xb7\x00\x01*\x04\xb5\x00\x02\xb1\x00\x00\x00\x02\x00\r\x00\x00\x00\n\x00\x02\x00\x00\x00\n\x00\x04\x00\x0b\x00\x0e\x00\x00\x00\x0c\x00\x01\x00\x00\x00\n\x00\x0f\x00\x10\x00\x00')}]}, {'access_flags': (413, 1), 'name_index': (415, 17), 'descriptor_index': (417, 18), 'attributes_count': (419, 1), 'access_flags_arr': ['ACC_PUBLIC'], 'attributes': [{'attribute_name_index': (421, 12), 'attribute_length': (423, 65), 'info': (427, b'\x00\x02\x00\x02\x00\x00\x00\t\x04<*\xb4\x00\x02\x1b`\xac\x00\x00\x00\x02\x00\r\x00\x00\x00\n\x00\x02\x00\x00\x00\x0f\x00\x02\x00\x10\x00\x0e\x00\x00\x00\x16\x00\x02\x00\x00\x00\t\x00\x0f\x00\x10\x00\x00\x00\x02\x00\x07\x00\x13\x00\x06\x00\x01')}]}]
2.14 attributes_count;¶
In [81]:
resolver.attributes_count = resolver.next(2, RTEnum.int_)
resolver.attributes_count
Out[81]:
(492, 1)
2.15 attributes[attributes_count];¶
In [82]:
resolver.attributes = parse_attributes(resolver, resolver.attributes_count)
resolver.attributes
Out[82]:
[{'attribute_name_index': (494, 20), 'attribute_length': (496, 2), 'info': (500, b'\x00\x15')}]
Format |
C Type |
Python type |
Standard size |
Notes |
---|---|---|---|---|
|
pad byte |
no value |
(7) |
|
|
char |
bytes of length 1 |
1 |
|
|
signed char |
integer |
1 |
(1), (2) |
|
unsigned char |
integer |
1 |
(2) |
|
_Bool |
bool |
1 |
(1) |
|
short |
integer |
2 |
(2) |
|
unsigned short |
integer |
2 |
(2) |
|
int |
integer |
4 |
(2) |
|
unsigned int |
integer |
4 |
(2) |
|
long |
integer |
4 |
(2) |
|
unsigned long |
integer |
4 |
(2) |
|
long long |
integer |
8 |
(2) |
|
unsigned long long |
integer |
8 |
(2) |
|
ssize_t |
integer |
(3) |
|
|
size_t |
integer |
(3) |
|
|
(6) |
float |
2 |
(4) |
|
float |
float |
4 |
(4) |
|
double |
float |
8 |
(4) |
|
char[] |
bytes |
||
|
char[] |
bytes |
||
|
void* |
integer |
(5) |
In [83]:
import struct
struct.unpack('>h', b'\x00\x34')
Out[83]:
(52,)