-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path03_value_types.mojo
More file actions
95 lines (75 loc) · 2.92 KB
/
03_value_types.mojo
File metadata and controls
95 lines (75 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Example 03: Working with Value Types
#
# Demonstrates: Value type checking and value extraction
from json import loads, dumps, Value, Null, make_array_value, make_object_value
from std.collections import List
def main() raises:
# Create Values directly (not from parsing)
print("Creating Values directly:")
var null_val = Value(Null())
print(" Null:", dumps(null_val))
var bool_val = Value(True)
print(" Bool:", dumps(bool_val))
var int_val = Value(42)
print(" Int:", dumps(int_val))
var float_val = Value(3.14159)
print(" Float:", dumps(float_val))
var str_val = Value("Hello, Mojo!")
print(" String:", dumps(str_val))
print()
# Type checking
print("Type checking parsed values:")
var parsed_null = loads("null")
var parsed_bool = loads("true")
var parsed_int = loads("123")
var parsed_float = loads("45.67")
var parsed_string = loads('"text"')
var parsed_array = loads("[1, 2, 3]")
var parsed_object = loads('{"key": "value"}')
print(" null is_null:", parsed_null.is_null())
print(" true is_bool:", parsed_bool.is_bool())
print(" 123 is_int:", parsed_int.is_int())
print(" 45.67 is_float:", parsed_float.is_float())
print(" 'text' is_string:", parsed_string.is_string())
print(" [1,2,3] is_array:", parsed_array.is_array())
print(" {...} is_object:", parsed_object.is_object())
print()
# is_number() returns True for both int and float
print("Number checking:")
print(" 123 is_number:", parsed_int.is_number())
print(" 45.67 is_number:", parsed_float.is_number())
print(" 'text' is_number:", parsed_string.is_number())
print()
# Value extraction
print("Extracting values:")
var data = loads('{"name": "Alice", "age": 30, "score": 95.5, "active": true}')
# Note: The current API stores arrays/objects as raw JSON strings
# To extract individual fields, you would parse them separately
var name = loads('"Alice"')
var age = loads("30")
var score = loads("95.5")
var active = loads("true")
print(" String value:", name.string_value())
print(" Int value:", age.int_value())
print(" Float value:", score.float_value())
print(" Bool value:", active.bool_value())
print()
# Array and object metadata
print("Array/Object metadata:")
var arr = loads("[10, 20, 30, 40, 50]")
print(" Array count:", arr.array_count())
print(" Array raw JSON:", arr.raw_json())
var obj = loads('{"a": 1, "b": 2, "c": 3}')
print(" Object count:", obj.object_count())
print(" Object raw JSON:", obj.raw_json())
var obj_keys = obj.object_keys()
print(" Object keys:", len(obj_keys), "keys")
print()
# Value equality
print("Value equality:")
var v1 = loads("42")
var v2 = loads("42")
var v3 = loads("43")
print(" 42 == 42:", v1 == v2)
print(" 42 == 43:", v1 == v3)
print(" 42 != 43:", v1 != v3)